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

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

20.11.2017, 15:52. Показов 10561. Ответов 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
43 / 43 / 23
Регистрация: 20.11.2017
Сообщений: 80
22.11.2017, 23:00
убери Exception тогда в этом блоке ты будешь перехватывать все ошибки которые не обработал ранее
1
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
22.11.2017, 23:58
Цитата Сообщение от Shchusia Посмотреть сообщение
убери Exception тогда в этом блоке ты будешь перехватывать все ошибки которые не обработал ранее
Документацию нужно читать:
exception Exception: All built-in, non-system-exiting exceptions are derived from this class. All user-defined exceptions should also be derived from this class
.
Python
1
2
3
4
5
6
7
>>> import requests
>>> requests.packages.urllib3.exceptions.ProtocolError
<class 'urllib3.exceptions.ProtocolError'>
>>> requests.packages.urllib3.exceptions.ProtocolError.__base__
<class 'urllib3.exceptions.HTTPError'>
>>> requests.packages.urllib3.exceptions.ProtocolError.__base__.__base__
<class 'Exception'>
Все ошибки (которые нужно перехватывать) в python наследуются от Exception.

А у ТС - так как он код не показал - проблема, скорей всего, в том каким образом он засунул свою функцию в try except.
0
1 / 1 / 3
Регистрация: 26.05.2015
Сообщений: 98
23.11.2017, 07:19  [ТС]
Цитата Сообщение от Garry Galler Посмотреть сообщение
проблема, скорей всего, в том каким образом он засунул свою функцию в try except
вполне возможно, но блин куда я только не пихал уже try, except, вот код:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import telebot
from time import sleep
from requests.packages.urllib3.exceptions import ProtocolError
 
 
CHATID = "******"
TOKEN = "******************************"
bot = telebot.TeleBot(TOKEN)
 
def send_capcha():
    photo = open('screen.png', 'rb')
    sent = bot.send_photo(CHATID, photo)
    bot.register_next_step_handler(sent, insert_capcha)
    bot.polling(timeout=0)
 
 
def insert_capcha(message):
    capcha = message.text
    print(capcha)
    sleep(1)
    bot.stop_polling()
 
send_capcha()
После запуска, картинка уходит боту и не дожидаясь возврата текста я рву соединение и получаю пачку ошибок, в том числе и ошибку requests.packages.urllib3.exception.Prot ocolError. Приложу полный лог трейсбэка:
Кликните здесь для просмотра всего текста

2017-11-23 09:16:10,477 (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))
"
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:\Users\hvppydvddy\Desktop\MyApps_last _d\teletest.py", line 23, in <module>
send_capcha()
File "C:\Users\hvppydvddy\Desktop\MyApps_last _d\teletest.py", line 14, in send_capcha
bot.polling(timeout=0)
File "C:\Python34\lib\site-packages\telebot\__init__.py", line 264, in polling
self.__threaded_polling(none_stop, interval, timeout)
File "C:\Python34\lib\site-packages\telebot\__init__.py", line 287, in __threaded_polling
polling_thread.raise_exceptions()
File "C:\Python34\lib\site-packages\telebot\util.py", line 77, in raise_exceptions
six.reraise(self.exc_info[0], self.exc_info[1], self.exc_info[2])
File "C:\Python34\lib\site-packages\six.py", line 693, in reraise
raise value
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))
[Finished in 6.0s with exit code 1]
[shell_cmd: python -u "C:\Users\hvppydvddy\Desktop\MyApps_last _d\teletest.py"]
[dir: C:\Users\hvppydvddy\Desktop\MyApps_last_ d]
[path: C:\Python34\Lib\site-packages\PyQt4;C:\Python34\;C:\Python34\ Scripts;C:\Windows\system32;C:\Windows;C :\Windows\System32\Wbem;C:\Windows\Syste m32\WindowsPowerShell\v1.0\]

Вот чтобы не соврать, я сумел перехватить ошибку requests.exceptions.ConnectionError, а остальные так и сыпятся.... Я хочу чтобы при разрыве вообще ничего не сыпалось, а написало мне "Что-то пошло не так..."
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
23.11.2017, 10:03
hvppydvddy, ожидать исключение нужно на строке sent = bot.send_photo(CHATID, photo), это кстати по логам видно.
0
1 / 1 / 3
Регистрация: 26.05.2015
Сообщений: 98
23.11.2017, 10:25  [ТС]
alex925,
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from requests.packages.urllib3.exceptions import ProtocolError
 
def send_capcha():
    photo = open('screen.png', 'rb')
    try:
        sent = bot.send_photo(CHTATID, photo)
    except ProtocolError:
        print('Поймали')
    else:
        bot.register_next_step_handler(sent, insert_capcha)
        bot.polling(timeout=0)
 
 
def insert_capcha(message):
    capcha = message.text
    print(capcha)
    sleep(1)
    bot.stop_polling()
Вот так?
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
23.11.2017, 10:47
Ну типо того, но перехватывать надо ConnectionError.
0
1 / 1 / 3
Регистрация: 26.05.2015
Сообщений: 98
23.11.2017, 11:03  [ТС]
Цитата Сообщение от alex925 Посмотреть сообщение
Ну типо того, но перехватывать надо ConnectionError.
А что с ошибкой протокола делать?
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
23.11.2017, 11:12
Судя по логам она возникает в результате возникновения ConnectionError. По этому с ней ничего делать не надо.
0
43 / 43 / 23
Регистрация: 20.11.2017
Сообщений: 80
23.11.2017, 11:28
а есть вероятность что вы не правильно грузите картинку ? там вроде передается id_chat, id_file а не сам файл, с начала надо загрузить на сервер получить id а потом его грузить
0
1 / 1 / 3
Регистрация: 26.05.2015
Сообщений: 98
23.11.2017, 12:16  [ТС]
Цитата Сообщение от Shchusia Посмотреть сообщение
а есть вероятность что вы не правильно грузите картинку ?
Ну без разрыва коннекта все же работает исправно

Добавлено через 10 минут
Цитата Сообщение от alex925 Посмотреть сообщение
но перехватывать надо ConnectionError
Если на месте ошибки протокола я пишу ConnectionError - перехвата никакого, а если пишу сюда:
Кликните здесь для просмотра всего текста
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import telebot
from time import sleep
from requests.exceptions import ConnectionError
 
bot = telebot.TeleBot('****************************')
 
def send_capcha():
    photo = open('screen.png', 'rb')
    sent = bot.send_photo('*******', photo)
    bot.register_next_step_handler(sent, insert_capcha)
    bot.polling(timeout=0)
 
 
def insert_capcha(message):
    capcha = message.text
    print(capcha)
    sleep(1)
    bot.stop_polling()
 
try:
    send_capcha()
except ConnectionError:
    print('ПОЙМАНА!')

то она частично ловится....но тоже как-то не понятно, почему сразу перед ней requests.exceptions.ConnectionError, она же отловилась?
Кликните здесь для просмотра всего текста
2017-11-23 14:11:49,739 (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))
"
ПОЙМАНА!
[Finished in 7.8s]
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
23.11.2017, 12:36
Цитата Сообщение от hvppydvddy Посмотреть сообщение
requests.packages.urllib3.exceptions.Pro tocolError:
Разве эта штука не наследник Exception ? т.е я к тому что должно ловить.

В общем не плохо смотреть в исходники иногда.
0
1 / 1 / 3
Регистрация: 26.05.2015
Сообщений: 98
23.11.2017, 12:44  [ТС]
Цитата Сообщение от alex925 Посмотреть сообщение
ожидать исключение нужно на строке sent = bot.send_photo(CHATID, photo), это кстати по логам видно.
А почему кстати на ней, а не на bot.register_next_step_handler(sent, insert_capcha)? Та строчка же посылает картинку, она приходит, значит в теории строчка выполнилась без ошибок. Мне кажется не совсем верно ждать там исключения.

Добавлено через 5 минут
Цитата Сообщение от Avazart Посмотреть сообщение
я к тому что должно ловить
что-то не ловит)
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
23.11.2017, 13:25
Цитата Сообщение от hvppydvddy Посмотреть сообщение
не ловит
У меня ловит.
0
1 / 1 / 3
Регистрация: 26.05.2015
Сообщений: 98
23.11.2017, 13:26  [ТС]
Цитата Сообщение от Garry Galler Посмотреть сообщение
У меня ловит.
в каком месте скрипта?
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
23.11.2017, 13:33
Цитата Сообщение от hvppydvddy Посмотреть сообщение
в каком месте скрипта?
В нужном.

У меня свой скрипт - у вас свой.
Где вы пытались ставить - вы так и не показали. И поскольку я не знаю API ваших ботов - могу лишь посоветовать прочитать их документацию про обработку ошибок.
0
1 / 1 / 3
Регистрация: 26.05.2015
Сообщений: 98
23.11.2017, 13:43  [ТС]
Цитата Сообщение от Garry Galler Посмотреть сообщение
У меня свой скрипт - у вас свой.
А ну тогда понятно...Можно даже не пробуя сказать что ловит... Я указал конкретный код, в котором не получается перехватить. Куда только я не ставил уже) Вот сейчас для примера еще раз поставил Exception на строчку sent = bot.send_photo(CHATID, photo) в функуции и целиком на вызов функции. Результат тот же.
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
23.11.2017, 13:48
Цитата Сообщение от hvppydvddy Посмотреть сообщение
Куда только я не ставил уже)
Куда? Вы ты и не сказали. А документацию прочитайте - Exception ловит все (кроме System Exceptions) и всегда. Вам это уже написали не только здесь.

Цитата Сообщение от hvppydvddy Посмотреть сообщение
Я указал конкретный код, в котором не получается перехватить.
В этом коде нет никакого перехвата.
---------------------------------------------------------------------
Читайте примеры с инета:
if __name__ == '__main__':
bot.polling(none_stop=True)
Функция polling запускает т.н. Long Polling, а параметр none_stop=True говорит, что бот должен стараться не прекращать работу при возникновении каких-либо ошибок. При этом, само собой, за ботом нужно следить, ибо сервера Telegram периодически перестают отвечать на запросы или делают это с большой задержкой приводя к ошибкам 5xx
Некоторые ботоводы дополнительно оборачивают и bot.polling в try except.
0
1 / 1 / 3
Регистрация: 26.05.2015
Сообщений: 98
23.11.2017, 13:58  [ТС]
Цитата Сообщение от Garry Galler Посмотреть сообщение
Куда? Вы ты и не сказали.
Кликните здесь для просмотра всего текста
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import telebot
from time import sleep
 
bot = telebot.TeleBot('*************************')
 
def send_capcha():
    try:
        photo = open('screen.png', 'rb')
        sent = bot.send_photo('**********', photo)
        bot.register_next_step_handler(sent, insert_capcha)
    except Exception:
        print('ПОЙМАНААААААААААААА')
    else:
        bot.polling(timeout=0)
 
 
def insert_capcha(message):
    capcha = message.text
    print(capcha)
    sleep(1)
    bot.stop_polling()
 
send_capcha()

результат:
Кликните здесь для просмотра всего текста
2017-11-23 15:52:52,591 (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))
"
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:\Users\hvppydvddy\Desktop\MyApps_last _d\exceptiontest.py", line 24, in <module>
send_capcha()
File "C:\Users\hvppydvddy\Desktop\MyApps_last _d\exceptiontest.py", line 15, in send_capcha
bot.polling(none_stop = True)
File "C:\Python34\lib\site-packages\telebot\__init__.py", line 264, in polling
self.__threaded_polling(none_stop, interval, timeout)
File "C:\Python34\lib\site-packages\telebot\__init__.py", line 287, in __threaded_polling
polling_thread.raise_exceptions()
File "C:\Python34\lib\site-packages\telebot\util.py", line 77, in raise_exceptions
six.reraise(self.exc_info[0], self.exc_info[1], self.exc_info[2])
File "C:\Python34\lib\site-packages\six.py", line 693, in reraise
raise value
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))
[Finished in 6.7s with exit code 1]
[shell_cmd: python -u "C:\Users\hvppydvddy\Desktop\MyApps_last _d\exceptiontest.py"]
[dir: C:\Users\hvppydvddy\Desktop\MyApps_last_ d]
[path: C:\Python34\Lib\site-packages\PyQt4;C:\Python34\;C:\Python34\ Scripts;C:\Windows\system32;C:\Windows;C :\Windows\System32\Wbem;C:\Windows\Syste m32\WindowsPowerShell\v1.0\]

Цитата Сообщение от Garry Galler Посмотреть сообщение
параметр none_stop=True
при таком параметре происходит бесконечный поллинг без остановки, мне такой способ не подходит, потому что функция выполняется раз в несколько часов, поэтому полинг включаю - выключаю.... Если указываю none_stop=True, то bot.stop_polling() не останавливает поллинг. А зачем мне рисковать? При бесконечном поллинге больше шансов уронить работу нежели при полуминутном включении поллинга... У меня даже в полуминутном режиме иногда случаются падения их и хочется исключить.
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
23.11.2017, 14:01
ConnectionError является подклассом RequestException, а последняя в свою очередь (через urllib3.exceptions) - подкласс стандартной Exception. Таким образом этот код ловит все ошибки и автоматически перезапускается при сбое:
Python
1
2
3
4
5
while True:
    try:
        bot.polling(none_stop=True)
    except Exception:
        time.sleep(5)
P.S. Что такое long-polling нужно знать прежде, чем начинать писать боты.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.11.2017, 14:01
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Система безопасности для сервера - слоя. Двойная связка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
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:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru