Это странное поведение, которое я не могу объяснить.Но так как вы запросили способы получения дополнительной отладочной информации, в ситуации, когда запуск без консоли, кажется, вызывает проблему, я бы порекомендовал следующее.
Во-первых, если вы перенаправляетеstdout
в файл, это хорошая мысль, но вы также должны перенаправить stderr
.
Лучше использовать модуль Python logging
, который является частью стандартной библиотеки,написать трассировку ошибок в файл.Дополнительным преимуществом является то, что файл журнала может также отлавливать ценную отладочную информацию из задействованных библиотек, поскольку logging
- это наиболее часто используемый способ сообщения о некритических ошибках и предупреждениях.
Для демонстрации:
import logging
logging.basicConfig(filename='log.txt', level=logging.DEBUG)
try:
raise OSError('Emulated exception to be traced back to in log file.')
except Exception:
logging.error('A critical error occurred.', exc_info=True)
Здесь вы указываете записать всю информацию журнала в файл с именем log.txt
в той же папке, что и .exe
.Вы должны обернуть блок try: ... except:
вокруг главной точки входа (main.run()
в вашем примере).Параметр exc_info=True
обеспечивает полное отслеживание ошибок ранее необработанного исключения, включенного в файл журнала.