Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python QObject实例化上的PySide分段错误_Python_Python 3.x_Segmentation Fault_Pyside - Fatal编程技术网

Python QObject实例化上的PySide分段错误

Python QObject实例化上的PySide分段错误,python,python-3.x,segmentation-fault,pyside,Python,Python 3.x,Segmentation Fault,Pyside,我有一个类,它是其他非qt类的基础。此类使用信号实例实例化QObject类。不幸的是,有时它会引起分段错误。这是我的密码: class PublisherSignal(QObject): notify = Signal(list) class PublisherBase: def __init__(self, *args, **kwargs): super(PublisherBase, self).__init__(*args, **kwargs)

我有一个类,它是其他非qt类的基础。此类使用信号实例实例化QObject类。不幸的是,有时它会引起分段错误。这是我的密码:

class PublisherSignal(QObject):
    notify = Signal(list)


class PublisherBase:
    def __init__(self, *args, **kwargs):
        super(PublisherBase, self).__init__(*args, **kwargs)
        self._signal = PublisherSignal()
faulthandler显示分段错误发生在
PublisherSignal()
类实例化上。并非总是如此。在大多数情况下,它运行良好。不涉及线程。
PublisherBase
的子类不是子类化
QObject


segfaults的原因可能是什么?

首先:
分段故障对于开发人员来说是一个复杂的问题。要有效地处理它,请使用。它是PythonV.3.x的一部分,但是您可以使用pip在PythonV.2.x中安装它。但有时您最好使用事件过滤器寄存器–用于小部件跟踪信号事件。下面是鼠标的一个示例(只是看看它的外观):

第二:您可以使用模块:

第三:对于涉及的线程(但是你说没有涉及线程)


我提供的有什么问题吗?实例化示例中的
PublisherBase
类(实例化
PublisherSignal
)时,它会崩溃。您的示例不完整,您只声明了2个类,但没有使用它,您应该知道问题可能是由您如何使用它引起的。因此,如果您需要帮助,最好提供帮助。:-)@好吧,这就是你依赖不受支持的遗留软件所得到的。像这样的问题现在永远无法解决。如果您想正确诊断问题,您必须编译至少qt4和pyside的调试版本,以便获得完整的堆栈跟踪。这可能足以揭示问题的根本原因(但我不相信)。@Djent我怀疑问题在于将复杂的python类型作为信号参数传递(与整数和字符串等基本类型相反)。如果是这样的话,一种可能的解决方法可能是将参数作为json字符串发送,或者只是尝试重写代码,这样就不需要发送诸如
list
dict
之类的类型,它告诉我分段错误是由
PublisherSignal
对象的实例化引起的。不知道为什么。
# IT IS JUST AN EXAMPLE (NOT A SOLUTION)

def eventFilter(self, source, event):
    if event.type() == QEvent.MouseButtonPress:
        if source == self.txtEditor :
            pos=event.pos()
            cursor=self.txtEditor.cursorForPosition(pos)
            cursor.select(QTextCursor.WordUnderCursor)
            txtClicked=cursor.selectedText()
            self.testCommand(str(txtClicked))
    return QMainWindow.eventFilter(self, source, event)
python -m pdb yourScript.py
shutdown (exit) can hang or segfault with daemon threads running