Использовать импортированный пакет в методе __del__ - PullRequest
0 голосов
/ 28 мая 2020

Экспериментирую с ботами Telegram. Я создал простой класс для отправки сообщений и хочу, чтобы он отправлял мне предупреждающее сообщение при удалении объекта TelegramBot. Мой код:

import requests
class TelegramBot:
    def __init__(self, token, id):
        self.token = token
        self.id = id

    def send_msg(self, msg: str):
        send_text = 'https://api.telegram.org/bot' + self.token + '/sendMessage?chat_id=' + self.id + '&parse_mode=Markdown&text=' + msg
        response = requests.get(send_text)
        return response.json()

    def __del__(self):
        self.send_msg('WARNING: TelegramBot object is being deleted')

, и он отлично работает. Проблема в методе __del__. Вместо отправки сообщения с предупреждением я получаю сообщение об ошибке:

Exception ignored in: <function TelegramBot.__del__ at 0x7f1927c74280>
Traceback (most recent call last):
  File "check_flight_status.py", line 20, in __del__
  File "check_flight_status.py", line 16, in send_msg
  File "/usr/lib/python3/dist-packages/requests/api.py", line 75, in get
  File "/usr/lib/python3/dist-packages/requests/api.py", line 60, in request
  File "/usr/lib/python3/dist-packages/requests/sessions.py", line 533, in request
  File "/usr/lib/python3/dist-packages/requests/sessions.py", line 646, in send
  File "/usr/lib/python3/dist-packages/requests/adapters.py", line 439, in send
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 665, in urlopen
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 376, in _make_request
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 996, in _validate_conn
  File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 319, in connect
ImportError: sys.meta_path is None, Python is likely shutting down

, и я считаю, что это связано с тем фактом, что пакет requests «уничтожается» перед объектом TelegramBot.

Итак, как я могу отправить сообщение при удалении объекта?

...