gpt4 book ai didi

exception-handling - PyQt 事件处理程序 snarf 异常

转载 作者:行者123 更新时间:2023-12-04 07:56:30 33 4
gpt4 key购买 nike

这是说明问题的代码:

from PyQt4 import QtGui
app = QtGui.QApplication([])
dialog = QtGui.QDialog()
button = QtGui.QPushButton('I crash')
layout = QtGui.QHBoxLayout()
layout.addWidget(button)
dialog.setLayout(layout)
def crash(): raise Exception('Crash!')
button.clicked.connect(crash)
button.click()
print 'I should not happen'

当我运行它时,PyQt4 会为我处理错误。我的控制台显示带有“崩溃!”的堆栈跟踪等等,我看到“我不应该发生”。

这没有用,因为我收到了一个包含许多处理程序的大型应用程序,我需要将它们的所有错误强加给我(以及我的 - 咳咳 - 自动化测试)。每次我运行时,错误都会从我的网络中逃脱,并且它们需要过多且无用的 try:except 块,在每个处理程序中,只是为了将它们全部捕获。

换句话说,我希望好的代码非常好,坏的代码非常糟糕。没有粉饰。

抱歉,如果这已经被问过了,但是当我在网上搜索它时,我自然会收到成千上万的新手询问基本的错误处理问题(或者,更糟糕的是,我让新手询问如何关闭他们任性的异常!;)

如何覆盖 PyQt4 的默认错误处理,以便我可以自己传播或记录错误?并且请不要回答 sys.excepthook,它会捕获 PyQt4 没有捕获的错误。

最佳答案

这不是答案,你这个愚蠢的网站。不要强制我们适应理想化线程模板的先入为主的概念。

答案是使用我的测试框架 setUp() 来 Hook 异常处理程序:

def setUp(self):
self.no_exceptions = True

def testExceptionHook(type, value, tback):
self.no_exceptions = False
sys.__excepthook__(type, value, tback)

sys.excepthook = testExceptionHook

在说“self.no_exceptions = False”的地方,我宁愿简单地说 self.fail('')。然而,因为 Python 的单元测试库坚持抛出异常只是为了注册测试失败,并且因为 PyQt 坚持捕捉所有异常,所以我们陷入了僵局。

为了适应 unittest.TestCase 的理想化测试用例的愚蠢先入为主的概念,我必须设置一个变量,然后在拆卸中检测它:
def tearDown(self):
self.assertTrue(self.no_exceptions)

这仍然不理想,但至少它会迫使我花更多时间关注错误,而不是花时间在技术网站上提示它们。

根本问题:如何关闭 PyQt 的魔术错误处理程序? - 仍然没有回答...

关于exception-handling - PyQt 事件处理程序 snarf 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14493081/

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