1 / 1 / 3
Регистрация: 26.05.2015
Сообщений: 98

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

20.11.2017, 15:52. Показов 10630. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром. возможно получится прикрутить интерпретатор питон для кастомизации игровой логики. что есть на текущий момент:. . .
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2. Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru