Форум программистов, компьютерный форум, киберфорум
Python: API, боты
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/82: Рейтинг темы: голосов - 82, средняя оценка - 5.00
52 / 5 / 1
Регистрация: 11.09.2018
Сообщений: 317

Отловить ошибку Error 10054 при работе бота для Telegram

08.10.2020, 16:05. Показов 17382. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ребята, здравствуйте!

Есть у меня Telegram-бот, написанный на python с помощью библиотеки PyTelegramBotAPI. Он замечательно работает, но иногда происходит что-то вреде обрыва соединения. В командной строке выводится:

"raise ConnectionError(err, request=request)
requests.exceptions.ConnectionError: ('Connection aborted.', ConnectionReset
Error (10054, 'Удаленный хост принудительно разорвал существующее подключение', None, 10054, None))"


Можно как-то отловить эту ошибку, и при ее появлении, например, создать какой-нибудь файл в какой-нибудь папке?

Я тогда десктопной программой промониторю ту папку и перезапущу бота.
Тут мне Дельфисты пытались помочь Как считать информацию из командной строки?. Я хотел мониторить текст в открытой командной строке. но ничего у нас не получилось. Может, на Пайтоне это решить проще?

Бота запускаю строго под windows и локально! Требований ни к каким линуксовым хостингам нет!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.10.2020, 16:05
Ответы с готовыми решениями:

Как отловить ошибку при работе с TfrxReport
Привет всем. Написал программу по выгрузке отчетов из шаблонов FastReport. Проверил, все работает. Решил потестить прогу на исключительные...

В работающем проекте с начала недели при любом запросе к Liveinternet.ru indy выдает ошибку: "socket error 10054"
Программа успешно годами парсила стату с Liveinternet до начала этой недели. С этой недели как бабка отшептала, выдает ошибку "Socket...

Telegram bot node js. Проблема в работе бота
Пишу бота на node js и возникла проблема, в том, что например один пользователь вводит команду и чат бот просит его ввести какие либо...

9
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,664
Записей в блоге: 29
08.10.2020, 16:11
Цитата Сообщение от Artiom-1984 Посмотреть сообщение
Можно как-то отловить эту ошибку
ты написал бота и не знаешь как перехватить исключение? try-except
и не надо никакой комстроки -отлавливаешь исключение и перезапускаешь бота прямо в скрипте
0
52 / 5 / 1
Регистрация: 11.09.2018
Сообщений: 317
08.10.2020, 18:59  [ТС]
Вот у меня в конце написано

Python
1
2
3
4
5
6
7
if __name__ == '__main__':
    ScheduleMessage.start_process()
    try:
        bot.polling(none_stop=True)
    except Exception as err:
        logging.error(err)
        print("Internet error!")
Ничего не перехватывает!

Добавлено через 2 часа 35 минут
Ребята, никто не знает
Может, я не правильно обрабатываю исключение?
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
08.10.2020, 22:01
Цитата Сообщение от Artiom-1984 Посмотреть сообщение
я не правильно обрабатываю исключение?
Ну дак ты узнай где именно оно возникает. Если в bot.polling оно не перехватывается, значит оно вызывается в другом месте.
В traceback'e всегда указан полный стек ошибок. Учись его читать.

Добавлено через 27 минут
Цитата Сообщение от Garry Galler Посмотреть сообщение
значит оно вызывается в другом месте
И если посмотреть исходники библиотеки, то можно даже легко определить потенциальное опасные методы.
0
52 / 5 / 1
Регистрация: 11.09.2018
Сообщений: 317
10.10.2020, 20:08  [ТС]
Так, вот мой traceback

Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
Process Process-1:
Traceback (most recent call last):
  File "C:\Users\Артём\AppData\Local\Programs\Python\Python38-32\lib\site-packag
es\urllib3\connectionpool.py", line 670, in urlopen
    httplib_response = self._make_request(
  File "C:\Users\Артём\AppData\Local\Programs\Python\Python38-32\lib\site-packag
es\urllib3\connectionpool.py", line 426, in _make_request
    six.raise_from(e, None)
  File "<string>", line 3, in raise_from
  File "C:\Users\Артём\AppData\Local\Programs\Python\Python38-32\lib\site-packag
es\urllib3\connectionpool.py", line 421, in _make_request
    httplib_response = conn.getresponse()
  File "C:\Users\Артём\AppData\Local\Programs\Python\Python38-32\lib\http\client
.py", line 1322, in getresponse
    response.begin()
  File "C:\Users\Артём\AppData\Local\Programs\Python\Python38-32\lib\http\client
.py", line 303, in begin
    version, status, reason = self._read_status()
  File "C:\Users\Артём\AppData\Local\Programs\Python\Python38-32\lib\http\client
.py", line 264, in _read_status
    line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1")
  File "C:\Users\Артём\AppData\Local\Programs\Python\Python38-32\lib\socket.py",
 line 669, in readinto
    return self._sock.recv_into(b)
  File "C:\Users\Артём\AppData\Local\Programs\Python\Python38-32\lib\ssl.py", li
ne 1241, in recv_into
    return self.read(nbytes, buffer)
  File "C:\Users\Артём\AppData\Local\Programs\Python\Python38-32\lib\ssl.py", li
ne 1099, in read
    return self._sslobj.read(len, buffer)
ConnectionResetError: [WinError 10054] Удаленный хост принудительно разорвал сущ
ествующее подключение
 
During handling of the above exception, another exception occurred:
 
Traceback (most recent call last):
  File "C:\Users\Артём\AppData\Local\Programs\Python\Python38-32\lib\site-packag
es\requests\adapters.py", line 439, in send
    resp = conn.urlopen(
  File "C:\Users\Артём\AppData\Local\Programs\Python\Python38-32\lib\site-packag
es\urllib3\connectionpool.py", line 726, in urlopen
    retries = retries.increment(
  File "C:\Users\Артём\AppData\Local\Programs\Python\Python38-32\lib\site-packag
es\urllib3\util\retry.py", line 403, in increment
    raise six.reraise(type(error), error, _stacktrace)
  File "C:\Users\Артём\AppData\Local\Programs\Python\Python38-32\lib\site-packag
es\urllib3\packages\six.py", line 734, in reraise
    raise value.with_traceback(tb)
  File "C:\Users\Артём\AppData\Local\Programs\Python\Python38-32\lib\site-packag
es\urllib3\connectionpool.py", line 670, in urlopen
    httplib_response = self._make_request(
  File "C:\Users\Артём\AppData\Local\Programs\Python\Python38-32\lib\site-packag
es\urllib3\connectionpool.py", line 426, in _make_request
    six.raise_from(e, None)
  File "<string>", line 3, in raise_from
  File "C:\Users\Артём\AppData\Local\Programs\Python\Python38-32\lib\site-packag
es\urllib3\connectionpool.py", line 421, in _make_request
    httplib_response = conn.getresponse()
  File "C:\Users\Артём\AppData\Local\Programs\Python\Python38-32\lib\http\client
.py", line 1322, in getresponse
    response.begin()
  File "C:\Users\Артём\AppData\Local\Programs\Python\Python38-32\lib\http\client
.py", line 303, in begin
    version, status, reason = self._read_status()
  File "C:\Users\Артём\AppData\Local\Programs\Python\Python38-32\lib\http\client
.py", line 264, in _read_status
    line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1")
  File "C:\Users\Артём\AppData\Local\Programs\Python\Python38-32\lib\socket.py",
 line 669, in readinto
    return self._sock.recv_into(b)
  File "C:\Users\Артём\AppData\Local\Programs\Python\Python38-32\lib\ssl.py", li
ne 1241, in recv_into
    return self.read(nbytes, buffer)
  File "C:\Users\Артём\AppData\Local\Programs\Python\Python38-32\lib\ssl.py", li
ne 1099, in read
    return self._sslobj.read(len, buffer)
urllib3.exceptions.ProtocolError: ('Connection aborted.', ConnectionResetError(1
0054, 'Удаленный хост принудительно разорвал существующее подключение', None, 10
054, None))
 
During handling of the above exception, another exception occurred:
 
Traceback (most recent call last):
  File "C:\Users\Артём\AppData\Local\Programs\Python\Python38-32\lib\multiproces
sing\process.py", line 313, in _bootstrap
    self.run()
  File "C:\Users\Артём\AppData\Local\Programs\Python\Python38-32\lib\multiproces
sing\process.py", line 108, in run
    self._target(*self._args, **self._kwargs)
  File "D:\fr\RST2\olxrstbot.py", line 174, in try_send_schedule
    schedule.run_pending()
  File "C:\Users\Артём\AppData\Local\Programs\Python\Python38-32\lib\site-packag
es\schedule\__init__.py", line 563, in run_pending
    default_scheduler.run_pending()
  File "C:\Users\Артём\AppData\Local\Programs\Python\Python38-32\lib\site-packag
es\schedule\__init__.py", line 94, in run_pending
    self._run_job(job)
  File "C:\Users\Артём\AppData\Local\Programs\Python\Python38-32\lib\site-packag
es\schedule\__init__.py", line 147, in _run_job
    ret = job.run()
  File "C:\Users\Артём\AppData\Local\Programs\Python\Python38-32\lib\site-packag
es\schedule\__init__.py", line 466, in run
    ret = self.job_func()
  File "D:\fr\RST2\olxrstbot.py", line 161, in send_message1
    bot.send_message(user_id_0, str(spis[i]))
  File "C:\Users\Артём\AppData\Local\Programs\Python\Python38-32\lib\site-packag
es\telebot\__init__.py", line 640, in send_message
    apihelper.send_message(self.token, chat_id, text, disable_web_page_preview,
reply_to_message_id,
  File "C:\Users\Артём\AppData\Local\Programs\Python\Python38-32\lib\site-packag
es\telebot\apihelper.py", line 201, in send_message
    return _make_request(token, method_url, params=payload, method='post')
  File "C:\Users\Артём\AppData\Local\Programs\Python\Python38-32\lib\site-packag
es\telebot\apihelper.py", line 102, in _make_request
    result = _get_req_session().request(
  File "C:\Users\Артём\AppData\Local\Programs\Python\Python38-32\lib\site-packag
es\requests\sessions.py", line 530, in request
    resp = self.send(prep, **send_kwargs)
  File "C:\Users\Артём\AppData\Local\Programs\Python\Python38-32\lib\site-packag
es\requests\sessions.py", line 643, in send
    r = adapter.send(request, **kwargs)
  File "C:\Users\Артём\AppData\Local\Programs\Python\Python38-32\lib\site-packag
es\requests\adapters.py", line 498, in send
    raise ConnectionError(err, request=request)
requests.exceptions.ConnectionError: ('Connection aborted.', ConnectionResetErro
r(10054, 'Удаленный хост принудительно разорвал существующее подключение', None,
 10054, None))
А вот код моего бота

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
    
try:
    def send_message1():
        spis = Parcing()
        i = 0
        while(i < len(spis)):
            bot.send_message(user_id_0, str(spis[i]))
            bot.send_message(user_id_1, str(spis[i]))
            bot.send_message(user_id_2, str(spis[i]))
            i = i+1
        
     
    schedule.every(3).minutes.do(send_message1)  # в скобках интервал в минутах
 
     
     
    class ScheduleMessage():
        def try_send_schedule():
            while True:
                schedule.run_pending()
                time.sleep(1)
     
        def start_process():
            p1 = Process(target=ScheduleMessage.try_send_schedule, args=())
            p1.start()
     
     
    if __name__ == '__main__':
        ScheduleMessage.start_process()
        bot.polling(none_stop=True)
except Exception as err:
    f1 = open('D:/fr/RST2/error/error.txt', 'w')
    f1.write('error')
    f1.close()
Выше только подключение библиотек и функция Parcing(). Она к Телеграму никакого отношения не имеет. Токен и id пользователей скрыл.
Как мне нужно обработать исключение, чтобы при появлении вышеуказанной ошибки, например, создался файл?

К слову, так, как сейчас написано (вусь бот в try - except) не работает.
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
10.10.2020, 20:48
Цитата Сообщение от Artiom-1984 Посмотреть сообщение
Так, вот мой traceback
Мне то он зачем? Я и без него выяснил, где библиотека может иметь такой Exception: во всех функциях завязанных на _make_request (send_message и т.д.)

Цитата Сообщение от Artiom-1984 Посмотреть сообщение
К слову, так, как сейчас написано (вусь бот в try - except) не работает.
Потому что было очевидной глупостью (ты даже не представляешь какой) пихать определения функций и классов внутрь блока try.
Попробуй для начала поизучать программирование. Нормального бота сможешь написать года через два.
0
 Аватар для Miryz
291 / 131 / 58
Регистрация: 24.11.2019
Сообщений: 532
11.10.2020, 00:04
Цитата Сообщение от Artiom-1984 Посмотреть сообщение
ConnectionResetError: [WinError 10054] Удаленный хост принудительно разорвал сущ
ествующее подключение
что тут не ясно?
0
52 / 5 / 1
Регистрация: 11.09.2018
Сообщений: 317
11.10.2020, 18:37  [ТС]
То, что нифига она не перехватывается

Сейчас переделал вот так.


Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
def send_message1():
    spis = Parcing()
    i = 0
    while(i < len(spis)):
        bot.send_message(user_id_0, str(spis[i]))
        bot.send_message(user_id_1, str(spis[i]))
        bot.send_message(user_id_2, str(spis[i]))
        i = i+1
        
        
class ScheduleMessage():
    def try_send_schedule():
        while True:
            schedule.run_pending()
            time.sleep(1)
     
    def start_process():
        p1 = Process(target=ScheduleMessage.try_send_schedule, args=())
        p1.start()
        
        
        
try: 
    schedule.every(3).minutes.do(send_message1)  # в скобках интервал в минутах
      
    if __name__ == '__main__':
        ScheduleMessage.start_process()
        bot.polling(none_stop=True)
    
except:
    f1 = open('D:/fr/RST2/error/error.txt', 'w')
    f1.write('error')
    f1.close()
При возникновении ошибки (любой) должен создаваться файл в папке. Всё!

Но у меня при возникновении ошибки процесс продолжается, В командной строке многократно пишется ошибка.

Обработка исключения и создание файла происходит (и то через раз), если я в командной строке нажму Ctrl+С (остановлю процесс). Разумеется, такое не устраивает!

Как вот перехватить имено возникновение ошибки.
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
11.10.2020, 19:32
Цитата Сообщение от Artiom-1984 Посмотреть сообщение
То, что нифига она не перехватывается
Тебе уже несколько раз сказали, где нужно перехватывать: в send_message.

И код твой просто ужасен, похоже ты просто где-то надергал кусочки Python, потому что синтаксис вообще не понимаешь.
0
52 / 5 / 1
Регистрация: 11.09.2018
Сообщений: 317
11.10.2020, 19:45  [ТС]
А я сейчас где перехватываю?

Python
1
schedule.every(3).minutes.do(send_message1)
Или надо в самой функции?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.10.2020, 19:45
Помогаю со студенческими работами здесь

Реализовать бота для telegram
Добрый день. Вопрос таков. Как данное задание выполнить со следующими условиями: 1) Запускаться приложение должно без дополнительных...

Создание бота для Telegram
Всем привет, есть ли те кто создавал ботов для Telegram? Нашел инструкцию на хабре http://habrahabr.ru/post/262247/, однако автор там...

Меню для бота Telegram
Дайте плес код чтобы сделать менюшку боту))

Ошибка при создании бота в Telegram: message must be non-empty
Хочу создать бота в Телеграмме,делал все по видео,но вылезли какие-то необъяснимые ошибки. /* * Created by SharpDevelop. * User:...

С чего начать при написании бота в telegram На python?
Здравствуйте! Я хочу понять, с чего стоит начинать изучать написание телеграм-ботов на питон? Я выучил основы питона + некоторые...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru