QTimer兑现python崩溃问题
当在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
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的事件循环会捕获它并中止(我想这就是它所做的)。