Программа Python не обрабатывает ошибки после преобразования в exe с использованием py2exe - PullRequest
0 голосов
/ 09 января 2019

Я написал интерфейс для базы данных myqsl, который в случае возникновения ошибки, например, если база данных была отключена, обрабатывает ее, вызывая мою пользовательскую ошибку, чтобы я знал, что не так. Я был доволен этим и решил, что он готов для преобразования в exe, и сделал это с помощью py2exe. это не удалось, и после некоторого исследования я обнаружил, что он больше не работает, поэтому я опустился до Python 3.4. Теперь он конвертируется, но преобразованная программа больше не обрабатывает ошибки.

Я проверил, есть ли у меня правильный соединитель mysql, и заново загрузил точно такой же, чтобы он включался в качестве ошибки, которую я обрабатываю, обычно это mysql.connector.Error.

Обработка ошибок в исходной программе:

import myqsl.connector as mariadb

try:
    mariadb_connection = mariadb.connect(user='root', password='', database='marsmenagerie')
    cursor = mariadb_connection.cursor()
except mariadb.Error:
    clearscreen()
    print("Failed to connect to Database. (Error: 2475JWRT), Contact Censored")
    print("===========================")
    PAUSE()
    exit()

Ошибка, которую преобразованная программа создает, если возникнет эта ошибка:

Traceback (most recent call last):
  File "C:\Python34\lib\site-packages\mysql\connector\network.py", line 525, in open_connection
    self.sock.connect(sockaddr)
ConnectionRefusedError: [WinError 10061] Kan geen verbinding maken omdat de doelcomputer de verbinding actief heeft geweigerd

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Python34\lib\site-packages\mysql\connector\locales\__init__.py", line 56, in get_client_error
globals(), locals(), ['client_error'])
ImportError: No module named 'mysql.connector.locales.eng'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Python34\lib\site-packages\mysql\connector\connection.py", line 245, in _open_connection
    self._socket.open_connection()
  File "C:\Python34\lib\site-packages\mysql\connector\network.py", line 528, in open_connection
    errno=2003, values=(self.get_address(), _strioerror(err)))
  File "C:\Python34\lib\site-packages\mysql\connector\errors.py", line 187, in __init__
    self.msg = get_client_error(self.errno)
  File "C:\Python34\lib\site-packages\mysql\connector\locales\__init__.py", line 59, in get_client_error
language))
ImportError: No localization support for language 'eng'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Python34\lib\site-packages\mysql\connector\network.py", line 148, in send_plain
    self.sock.sendall(packet)
OSError: [WinError 10057] Een aanvraag om gegevens te verzenden of te ontvangen is niet toegestaan omdat de socket niet is verbonden en omdat (tijdens het verzenden op een datagramsocket via een sendto-aanroep) geen adres is opgegeven

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Python34\lib\site-packages\mysql\connector\locales\__init__.py", line 56, in get_client_error
globals(), locals(), ['client_error'])
ImportError: No module named 'mysql.connector.locales.eng'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Python34\lib\site-packages\mysql\connector\connection.py", line 102, in __init__
    self.connect(**kwargs)
  File "C:\Python34\lib\site-packages\mysql\connector\abstracts.py", line 731, in connect
    self._open_connection()
  File "C:\Python34\lib\site-packages\mysql\connector\connection.py", line 256, in _open_connection
    self.close()
  File "C:\Python34\lib\site-packages\mysql\connector\connection.py", line 276, in close
    self.cmd_quit()
  File "C:\Python34\lib\site-packages\mysql\connector\connection.py", line 617, in cmd_quit
    self._socket.send(packet, 0, 0)
  File "C:\Python34\lib\site-packages\mysql\connector\network.py", line 151, in send_plain
    errno=2055, values=(self.get_address(), _strioerror(err)))
  File "C:\Python34\lib\site-packages\mysql\connector\errors.py", line 187, in __init__
    self.msg = get_client_error(self.errno)
  File "C:\Python34\lib\site-packages\mysql\connector\locales\__init__.py", line 59, in get_client_error
language))
ImportError: No localization support for language 'eng'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Python34\lib\site-packages\mysql\connector\network.py", line 148, in send_plain
    self.sock.sendall(packet)
OSError: [WinError 10057] Een aanvraag om gegevens te verzenden of te ontvangen is niet toegestaan omdat de socket niet is verbonden en omdat (tijdens het verzenden op een datagramsocket via een sendto-aanroep) geen adres is opgegeven

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Python34\lib\site-packages\mysql\connector\locales\__init__.py", line 56, in get_client_error
globals(), locals(), ['client_error'])
ImportError: No module named 'mysql.connector.locales.eng'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "program.py", line 16, in <module>
  File "C:\Python34\lib\site-packages\mysql\connector\__init__.py", line 173, in connect
    return MySQLConnection(*args, **kwargs)
  File "C:\Python34\lib\site-packages\mysql\connector\connection.py", line 105, in __init__
    self.close()
  File "C:\Python34\lib\site-packages\mysql\connector\connection.py", line 276, in close
    self.cmd_quit()
  File "C:\Python34\lib\site-packages\mysql\connector\connection.py", line 617, in cmd_quit
    self._socket.send(packet, 0, 0)
  File "C:\Python34\lib\site-packages\mysql\connector\network.py", line 151, in send_plain
    errno=2055, values=(self.get_address(), _strioerror(err)))
  File "C:\Python34\lib\site-packages\mysql\connector\errors.py", line 187, in __init__
    self.msg = get_client_error(self.errno)
  File "C:\Python34\lib\site-packages\mysql\connector\locales\__init__.py", line 59, in get_client_error
language))
ImportError: No localization support for language 'eng'    

Я знаю, это долго. И я стараюсь сделать его как можно более коротким, но я не хочу скрывать информацию, которая может иметь отношение к делу. Возможно, моя самая большая проблема с изготовлением MCVE.

Я ожидал, что это вызовет ошибку, которую я закодировал. Однако это просто вызывает ошибку, показанную выше. При запуске с активной базой данных программа работает нормально.

1 Ответ

0 голосов
/ 10 января 2019

Хорошо. Я решил это! Проблема в том, что локализация eng для стандартных ошибок mysql не копируется py2exe, по крайней мере, в этом случае. Вы можете найти доказательства этого в этой строке в ошибке:

ImportError: No module named 'mysql.connector.locales.eng'

Эта проблема, казалось, существовала прежде, и, таким образом, было исправление. ( ImportError: Нет поддержки локализации для языка 'eng' в python ) Я вручную добавил локализацию eng в файл library.zip с некоторой помощью с этого сайта: http://pydoc.net/mysql-connector-python/2.0.2/

И теперь он работает как сон.

...