Python索引器被抛出,即使它在两个块中

2024-09-27 22:35:30 发布

您现在位置:Python中文网/ 问答频道 /正文

这可能是一个非常愚蠢的错误,但唉,我对Python还比较陌生,我发现这个错误令人费解,所以任何帮助都将不胜感激。这可能是一个相对简单的错误,但在网站上的搜索到目前为止还没有解决这个问题。以下是解决所有这些问题的方法:

def loggable(func):
    def log(self, *args, **kwargs):
        try:
            return func(self, *args, **kwargs)
        except Exception as ex:
            import traceback
            import sys
            tb = sys.exc_info()[2]
            exception_string = traceback.format_exception(type(ex), ex, tb)
            [self.error_log.appendText(item) for item in exception_string]

            m = qg.QMessageBox()
            m.setIcon(m.Warning)
            m.setText(ex.args[0])
            try:
                m.setInformativeText(str(ex.args[1]))
            except IndexError:
                pass
            try:
                m.setDetailedText(str(ex.args[2]))
            except IndexError:
                pass
            m.exec_()
            raise

    return log

这一行的例外

m.setDetailedText(str(ex.args[2]))

即使它不是在一个而是在两个挡块内也会被扔出去。我正在努力找出问题所在,任何帮助都将不胜感激。你知道吗

以下是回溯:

Traceback (most recent call last):
  File "/home/skylion/Git/popupcad/popupcad/guis/editor.py", line 335, in <lambda>
    popupcad.manufacturing.joint_operation2.JointOperation2)}})
  File "/home/skylion/Git/popupcad/popupcad/guis/editor.py", line 51, in log
    m.setDetailedText(str(ex.args[2]))
IndexError: tuple index out of range

Tags: inselflogdef错误exceptionargsex
2条回答

根据文档,上一个语句raise将重新引发上一个异常。你知道吗

https://docs.python.org/2/tutorial/errors.html#raising-exceptions

外部异常处理程序的最后一行是raise,它将重新调用最后一个异常,该异常显然试图调用m.setDetailedText。它失败了,但它的异常现在是最近的,当您在最后点击raise时,它会被重新引发。你知道吗

要引发原始异常,请将其从raise更改为raise ex

相关问题 更多 >

    热门问题