Python索引器被抛出,即使它';除了两个街区外,它在两个街区内

Python索引器被抛出,即使它';除了两个街区外,它在两个街区内,python,python-2.7,exception,error-handling,runtimeexception,Python,Python 2.7,Exception,Error Handling,Runtimeexception,这可能是一个非常愚蠢的错误,但遗憾的是,我对Python还比较陌生,我发现这个错误令人困惑,因此希望您能提供帮助。这可能是一个相对简单的错误,但到目前为止,网站上的搜索并没有解决这个问题。以下是解决所有这些问题的方法: def loggable(func): def log(self, *args, **kwargs): try: return func(self, *args, **kwargs) except Exception

这可能是一个非常愚蠢的错误,但遗憾的是,我对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
回溯(最近一次呼叫最后一次):
文件“/home/skylion/Git/popupcad/popupcad/guis/editor.py”,第335行,在
popupcad.制造.联合操作2.联合操作2)}
文件“/home/skylion/Git/popupcad/popupcad/guis/editor.py”,第51行,在日志中
m、 setDetailedText(str(ex.args[2]))
索引器错误:元组索引超出范围

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


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

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


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

,根据文档,您的上一条语句
raise
将重新引发以前的异常


根据文档,您的上一个语句
raise
将重新引发以前的异常


回溯在哪里?@user3100115刚刚添加了它。抱歉,回溯在哪里?@user3100115刚刚添加了它。对不起