Форум программистов, компьютерный форум, киберфорум
Python
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.56/55: Рейтинг темы: голосов - 55, средняя оценка - 4.56
1 / 1 / 3
Регистрация: 26.05.2015
Сообщений: 98

Try Exept, как правильно обработать некоторые исключения?

20.11.2017, 15:52. Показов 10555. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем здрасте. Есть фунция, которая отсылает в телеграм картинку и ждет пока я пришлю в ответ текст с нее. Я поместил функцию в блок try, а блок except сделал на все исключения:
Python
1
2
except Exception:
    print('Что-то пошло не так!')
Я правильно понмаю, исключение Exception должны поймать любую ошибку? В общем я запускаю скрипт, картинка уходит, я принудительно рву коннект, чтоб получить ошибки и получаю ошибки вида - "requests.packages.urllib3.exceptions.Pr otocolError: ('Connection aborted.', ConnectionResetError(10054, 'Удаленный хост принудительно разорвал существующее подключение', None, 10054, None))" Как правильно указать что при таких ошибках стоит тоже выполнить print?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.11.2017, 15:52
Ответы с готовыми решениями:

Почему некоторые исключения невозможно обработать стандартным образом при помощи try catch?
Почему некоторые исключения невозможно обработать стандартным образом при помощи try catch? Вместо обработки программу тупо завершается.

Не правильно работает разность множеств Exept
Добрый вечер! Нахожу разность двух списков. Всё работает нормально, но в одном случае сумма Count двух подмножеств меньше ,чем Count...

Как правильнее обработать исключения?
Здарвствуйте. Хочу сделать так, чтобы кодировка программы задавалась пользователем явно(будь то параметр jvm или параметр приложения) . В...

23
1 / 1 / 3
Регистрация: 26.05.2015
Сообщений: 98
23.11.2017, 14:14  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Garry Galler Посмотреть сообщение
ConnectionError является подклассом RequestException, а последняя в свою очередь (через urllib3.exceptions) - подкласс стандартной Exception. Таким образом этот код ловит все ошибки и автоматически перезапускается при сбое:
Кликните здесь для просмотра всего текста
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import telebot
from time import sleep
import requests
 
bot = telebot.TeleBot('******************')
 
def send_capcha():
        photo = open('screen.png', 'rb')
        sent = bot.send_photo('**********', photo)
        bot.register_next_step_handler(sent, insert_capcha)
        while True:
            try:
                bot.polling(none_stop=True)
            except Exception:
                print('СРАБОТАЛО!!!!')
                sleep(90)
 
def insert_capcha(message):
    capcha = message.text
    print(capcha)
 
send_capcha()

реузльтат:
Кликните здесь для просмотра всего текста
СРАБОТАЛО!!!!
2017-11-23 16:07:54,165 (util.py:64 PollingThread) ERROR - TeleBot: "ConnectionError occurred, args=(ProtocolError('Connection aborted.', ConnectionResetError(10054, 'Удаленный хост принудительно разорвал существующее подключение', None, 10054, None)),)
Traceback (most recent call last):
File "C:\Python34\lib\site-packages\requests\packages\urllib3\conne ctionpool.py", line 372, in _make_request
httplib_response = conn.getresponse(buffering=True)
TypeError: getresponse() got an unexpected keyword argument 'buffering'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "C:\Python34\lib\site-packages\requests\packages\urllib3\conne ctionpool.py", line 544, in urlopen
body=body, headers=headers)
File "C:\Python34\lib\site-packages\requests\packages\urllib3\conne ctionpool.py", line 374, in _make_request
httplib_response = conn.getresponse()
File "C:\Python34\lib\http\client.py", line 1227, in getresponse
response.begin()
File "C:\Python34\lib\http\client.py", line 386, in begin
version, status, reason = self._read_status()
File "C:\Python34\lib\http\client.py", line 348, in _read_status
line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1")
File "C:\Python34\lib\socket.py", line 378, in readinto
return self._sock.recv_into(b)
File "C:\Python34\lib\ssl.py", line 748, in recv_into
return self.read(nbytes, buffer)
File "C:\Python34\lib\ssl.py", line 620, in read
v = self._sslobj.read(len, buffer)
ConnectionResetError: [WinError 10054] Удаленный хост принудительно разорвал существующее подключение

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "C:\Python34\lib\site-packages\requests\adapters.py", line 370, in send
timeout=timeout
File "C:\Python34\lib\site-packages\requests\packages\urllib3\conne ctionpool.py", line 597, in urlopen
_stacktrace=sys.exc_info()[2])
File "C:\Python34\lib\site-packages\requests\packages\urllib3\util\ retry.py", line 245, in increment
raise six.reraise(type(error), error, _stacktrace)
File "C:\Python34\lib\site-packages\requests\packages\urllib3\packa ges\six.py", line 309, in reraise
raise value.with_traceback(tb)
File "C:\Python34\lib\site-packages\requests\packages\urllib3\conne ctionpool.py", line 544, in urlopen
body=body, headers=headers)
File "C:\Python34\lib\site-packages\requests\packages\urllib3\conne ctionpool.py", line 374, in _make_request
httplib_response = conn.getresponse()
File "C:\Python34\lib\http\client.py", line 1227, in getresponse
response.begin()
File "C:\Python34\lib\http\client.py", line 386, in begin
version, status, reason = self._read_status()
File "C:\Python34\lib\http\client.py", line 348, in _read_status
line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1")
File "C:\Python34\lib\socket.py", line 378, in readinto
return self._sock.recv_into(b)
File "C:\Python34\lib\ssl.py", line 748, in recv_into
return self.read(nbytes, buffer)
File "C:\Python34\lib\ssl.py", line 620, in read
v = self._sslobj.read(len, buffer)
requests.packages.urllib3.exceptions.Pro tocolError: ('Connection aborted.', ConnectionResetError(10054, 'Удаленный хост принудительно разорвал существующее подключение', None, 10054, None))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "C:\Python34\lib\site-packages\telebot\util.py", line 58, in run
task(*args, **kwargs)
File "C:\Python34\lib\site-packages\telebot\__init__.py", line 159, in __retrieve_updates
updates = self.get_updates(offset=(self.last_updat e_id + 1), timeout=timeout)
File "C:\Python34\lib\site-packages\telebot\__init__.py", line 129, in get_updates
json_updates = apihelper.get_updates(self.token, offset, limit, timeout, allowed_updates)
File "C:\Python34\lib\site-packages\telebot\apihelper.py", line 175, in get_updates
return _make_request(token, method_url, params=payload)
File "C:\Python34\lib\site-packages\telebot\apihelper.py", line 54, in _make_request
timeout=(connect_timeout, read_timeout), proxies=proxy)
File "C:\Python34\lib\site-packages\requests\sessions.py", line 465, in request
resp = self.send(prep, **send_kwargs)
File "C:\Python34\lib\site-packages\requests\sessions.py", line 573, in send
r = adapter.send(request, **kwargs)
File "C:\Python34\lib\site-packages\requests\adapters.py", line 415, in send
raise ConnectionError(err, request=request)
requests.exceptions.ConnectionError: ('Connection aborted.', ConnectionResetError(10054, 'Удаленный хост принудительно разорвал существующее подключение', None, 10054, None))


Добавлено через 3 минуты
Цитата Сообщение от Garry Galler Посмотреть сообщение
У меня свой скрипт
дайте пример вашего, где все сработало, любопытно
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
23.11.2017, 22:19
Цитата Сообщение от hvppydvddy Посмотреть сообщение
СРАБОТАЛО!!!!
Ну и в каком месте Exception не перехватило ошибку?

То, что у вас сразу после перехвата возникают новые exception'ы - это уже отдельная тема.
Но вы же об этом не написали - вы изначально неверно сформулировали свою проблему.
У меня нет своего телеграм-бота, чтобы проверить ваш код, но суть не в этом.
Вы написали, что Exception не перехватывает ошибки, вам ответили, что перехватывает - потому что документация не врет.
Кто был прав?

Теперь по новому сабжу: почему после перехвата ошибки, возникают новые?
Вопрос на миллион: вы, в своем коде, используете точку входа в приложение? Для многопоточных приложений под windows это must have.
1
1 / 1 / 3
Регистрация: 26.05.2015
Сообщений: 98
23.11.2017, 22:36  [ТС]
Цитата Сообщение от Garry Galler Посмотреть сообщение
То, что у вас сразу после перехвата возникают новые exception'ы - это уже отдельная тема.
Тема изначальна с просьбой помочь в обработке кучи ошибок...
Цитата Сообщение от hvppydvddy Посмотреть сообщение
Как правильно указать что при таких ошибках стоит тоже выполнить print?
Цитата Сообщение от hvppydvddy Посмотреть сообщение
Я хочу чтобы при разрыве вообще ничего не сыпалось
Я не кинул код на форум и не сказал "У меня ничего не получается, исправьте мне без объяснения", я попросил помощи, чтобы понимающие люди подсказали и объяснилимне, что я делаю не так. Я новичок в программировании. Для этого и создан форум. Проблема конечно же не решилась.но для себя я заимел полезного. И Вам отчасти спасибо зп это.
Цитата Сообщение от Garry Galler Посмотреть сообщение
Теперь по новому сабжу: почему после перехвата ошибки, возникают новые?
я к сожалению не знаю, могу только предположить что одна вызывает другую по цепочке....и отлавливать их нужно по очереди.... наверное=)
Цитата Сообщение от Garry Galler Посмотреть сообщение
Вопрос на миллион: вы, в своем коде, используете точку входа в приложение?
Нет и даже не знаю что это, но это тоже от части хорошо, будет что почитать.
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
24.11.2017, 01:33
Точка входа в компилируемых языках это главная функция main().
В python это блок if __name__ == '__main__':
Его использование является good practice, даже если приложение однопоточное.
Многопоточные приложения (telebot - многопоточный модуль) под windows без него вообще нельзя использовать.

Добавлено через 20 минут

Не по теме:

Я бы вам дал более полный ответ, но не могу зарегистрироватся. Реально не могу.
На хабре была статья о том, что регистрация в telegramm в России скомпрометирована интернет провайдерами типа МТС (мне приходится пользоваться именно его услугами), которые контролируются спецслужбами. Я отправил несколько запросов на получение SMS кода по телефону, но ответа так и не пришло. Похоже, что Дурова у нас действительно не любят :)

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.11.2017, 01:33
Помогаю со студенческими работами здесь

Google testing: как обработать исключения из SetUp() / TearDown()?
Возникла необходимость отслеживать когда и какой объект был удален. Решил применить для этого гугловский фреймворк (gtest), он, вроде бы,...

Исключения: как из блока try обработать и передать наверх АВТОРСКОЕ исключение?
Как скропать своё исключение, Шилдт говорит, а как передать наверх- молчит. Вот так наверх передаётся встроенное исключение...

Как посредством catch try throw сделать линейно без if else чтобы обработать исключения
#include<stdio.h> #include<math.h> main () //ñòàðòîâàÿ ôóíêöèÿ float x,y,z; printf("Enter number x :"); ...

Калькулятор в одну строку и умеющий работать с римскими и арабскими цифрами. Как обработать исключения?
Прошу помочь. Правильно ли я применил throw new IllegalArgumentException(); для чисел вне диапазона ? Как обработать исключения: 1) ввод не...

Как мне обработать исключение так, чтобы программа продолжала работать, будто исключения не было?
Друзья! Есть текстовый файл в кодировке UTF-16LE (суть тот же самый файл *.reg, только сохранённый с расширением *.txt), там даже BOM...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
24
Ответ Создать тему
Новые блоги и статьи
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru