gpt4 book ai didi

python - 捕获 PyQt 异常

转载 作者:行者123 更新时间:2023-12-05 06:43:01 28 4
gpt4 key购买 nike

我想记录我的 PyQt 应用程序中的所有错误。即使是那些被沉默的人 - 提出,但程序继续运行。
所以,我有:

日志功能

def setLogger(level=logging.DEBUG,
name="my_logger",
file=join("src", "log.out")):
logger = logging.getLogger(name)
logger.setLevel(level)

ch = logging.StreamHandler()
ch.setLevel(logging.INFO)
formatter = logging.Formatter('%(message)s')
ch.setFormatter(formatter)

fh = logging.FileHandler(file)
fh.setLevel(level)
formatter = logging.Formatter(
'%(asctime)s : %(message)s',
datefmt='%m/%d/%Y %I:%M:%S %p')
fh.setFormatter(formatter)

logger.addHandler(ch)
logger.addHandler(fh)
return logger

用于静默异常的 Sys.excepthook

sys._excepthook = sys.excepthook
def exception_hook(exctype, value, traceback):
sys._excepthook(exctype, value, traceback)
sys.exit(1)
sys.excepthook = exception_hook

然后我尝试做这样的事情

def main():
app = QtGui.QApplication(sys.argv)
app.setQuitOnLastWindowClosed(False)
logger.info("New session started")
try:
window = MainWindow()
window.show()
sys.exit(app.exec_())
except Exception:
logger.exception("Got error in MainWindow")

在主窗口的某个地方

try:
dialog = MyDialog(somedata, somedata)
dialog.closed.connect(self.doSomething)
dialog.exec_()
except Exception:
self.logger.exception("Got error in Dialog module")
sys.exit()

手动引发异常

class MyDialog(QtGui.QDialog):
def __init__(self):
super(MyDialog, self).__init__()
raise Exception

一切如预期...几乎。
我得到的不是 1 条消息,而是 4!

我做错了什么以及如何改变它?

最佳答案

这个问题与 PyQt 或异常无关,而是与我的愚蠢有关:)。
我的每个类(class)都有自己的记录器,它是这样初始化的

self.logger = setLogger()

问题是我没有给他们自己的名字,所以我立刻有 4 个同名的记录器 = my_logger。在我为所有记录器设置不同的名称后 - 问题就消失了。

class MyDialog(QtGui.QDialog):
def __init__():
super(MyDialog, self).__init__()
self.logger = setLogger("dialog_logger")
[...]

class MyWindow(QtGui.QMainWindow):
def __init__():
super(MyWindow, self).__init__()
self.logger = setLogger("window_logger")
[...]
#and so on

关于python - 捕获 PyQt 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34930048/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com