Причиной проблемы было то, что исключение вызывалось до того, как ex
было присвоено чему-либо.
Если исключение необходимо обработать до определения ex
, обработчик не должен предполагать, чточто он может использовать ex
.
Простой способ справиться с этим - установить ex
в None
до его готовности и проверить его в обработчике.
def error_handler(etype, value, tb):
error_msg = ''.join(traceback.format_exception(etype, value, tb))
print(error_msg)
if ex: # Check if ex is ready
ex.foo()
sys.exit(1)
if __name__ == '__main__':
ex = None
sys.excepthook = error_handler
app = QApplication([])
ex = Window()
ex.show()
app.exec_()