QTimer兑现python崩溃问题

QTimer兑现python崩溃问题,python,qt,Python,Qt,当在QTimer回调中引发异常时,我遇到python崩溃的问题。下面是一个小例子,说明了这一点 import sys from PyQt5.QtCore import (QTimer, pyqtSlot) from PyQt5.QtWidgets import (QMainWindow, QApplication) class MainWindow (QMainWindow): def __init__(self): QMainWindow.__init__(self

当在QTimer回调中引发异常时,我遇到python崩溃的问题。下面是一个小例子,说明了这一点

import sys
from PyQt5.QtCore import (QTimer, pyqtSlot)
from PyQt5.QtWidgets import (QMainWindow, QApplication)

class MainWindow (QMainWindow):

    def __init__(self):
        QMainWindow.__init__(self)

        self.timer = QTimer(self)
        self.timer.timeout.connect(self.timer_call)
        self.timer.start(1000)

    @pyqtSlot()
    def timer_call(self):
        print ("Called")
        x={}
        x[2]

app = QApplication(sys.argv)
main = MainWindow()
main.show()

sys.exit(app.exec_())
运行时,将显示以下内容:

叫 回溯(最近一次呼叫最后一次): 文件“bin/gtscan.py”,第21行,在计时器调用中 x[2] 关键错误:2 中止(堆芯转储)

使用的软件版本如下(均来自Arch Linux版本):

Python 3.4.3 Qt版本:5.5.0 PyQt版本:5.5 SIP版本:4.16.9


有人能帮我一下吗?这不是我正在寻找帮助的关键错误,这就是为什么这会导致python中止(内核转储)错误。

您的错误在下面几行中

x={}    // this is empty dictionary
x[2]    // here you are trying to retrieve key 2's value
由于python无法检索
key
2的值,因此它会因
KeyError


分段错误
/
核心转储
发生在python试图访问无法访问的内存时。

已经向我指出了原因:

PyQt
v5.5开始,未经处理的异常将导致调用
qFatal()

有关此操作的更多详细信息,请登录。

我预计会出现此错误,但不会导致中止(内核转储)例外-我已更新原始消息以突出显示真实的issue@JohnAlan:放入
try…除了
块,否则核心转储不会出现。我再次意识到这一点-但核心cump从来都不是好的,对我来说,这表明某个地方有一个真正的问题需要解决?KeyError不应该导致python产生分段错误-它会的只需传播异常。本例中的分段错误是由PyQt 5.5中的更改引起的,该更改现在对未处理的异常调用qFatal(),然后将调用abort()-因此我看到了这个问题。有趣的是,我在本例中没有遇到分段错误。Python 3.4.0,PyQt5.2.1,SIP:4.15.5。它只是在每次超时时打印一条异常消息。应用程序没有崩溃。只是一个样式说明:为什么要从smth导入
(这个和这个)
(带大括号)?如果没有它们,我会不知道更好吗?我不知道PYQT,但是在C++中,异常不能离开时隙,否则QT的事件循环会捕获它并中止(我想这就是它所做的)。