我使用日志记录模块将调试信息写入日志文件。
我在线上创建了一个错误26。
from sys import argv, exit
import logging
from PyQt5.QtWidgets import QApplication, QMainWindow
class Window(QMainWindow):
def __init__(self):
super(Window, self).__init__()
def InitWindow(self):
self.setGeometry(0, 0, 400, 300)
self.setMouseTracking(True)
def mousePressEvent(self, a0):
#a = 5 / 0
pass
if __name__ == '__main__':
log_format = '%(asctime)s %(filename)s: %(message)s'
logging.basicConfig(filename="tst_logfile.log", format=log_format,
datefmt='%Y-%m-%d %H:%M:%S', level='DEBUG')
try:
app = QApplication(argv)
window = Window()
window.show()
# create an error
a = 5 / 0
except Exception as e:
logging.debug(e, exc_info=True)
exit(app.exec_())
一切正常,日志已写入。
并且该应用程序继续工作(并且应该飞出)。
2022-05-28 17:32:27 tst.py: division by zero
Traceback (most recent call last):
File "C:\Users\Tom\PycharmProjects\pythonProject2\tst.py", line 26, in <module>
a = 5 / 0
ZeroDivisionError: division by zero
但是一旦将错误移至事件mousePressEvent(第 14 行),跟踪就不会写入文件。尽管发生错误并且应用程序终止。
from sys import argv, exit
import logging
from PyQt5.QtWidgets import QApplication, QMainWindow
class Window(QMainWindow):
def __init__(self):
super(Window, self).__init__()
def InitWindow(self):
self.setGeometry(0, 0, 400, 300)
self.setMouseTracking(True)
def mousePressEvent(self, a0):
a = 5 / 0
#pass
if __name__ == '__main__':
log_format = '%(asctime)s %(filename)s: %(message)s'
logging.basicConfig(filename="tst_logfile.log", format=log_format,
datefmt='%Y-%m-%d %H:%M:%S', level='DEBUG')
try:
app = QApplication(argv)
window = Window()
window.show()
# create an error
#a = 5 / 0
except Exception as e:
logging.debug(e, exc_info=True)
exit(app.exec_())
我究竟做错了什么?
如何确保记录所有应用程序错误?
不,它不应该崩溃,因为您将错误包装在
try - except.traceback - 打印或检索堆栈回溯,以帮助您。