Python IndexError 被抛出,即使它在两个 except 块内
Python IndexError being thrown even though it's inside two except blocks
这可能是一个非常愚蠢的错误,但唉,我对 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]))
即使它不在一个而是两个 catch 块内,也会被抛出。我试图弄清楚问题可能是什么,我们将不胜感激。
这是回溯:
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
您的外部异常处理程序的最后一行是 raise
,它将重新引发最后一个异常,这显然是在尝试调用 m.setDetailedText
。那失败了,但它的异常现在是最近的,并且在你最后点击 raise
时重新引发。
要引发原始异常,请将其从 raise
更改为 raise ex
根据文档,您的最后一条语句 raise
将重新引发之前的异常。
https://docs.python.org/2/tutorial/errors.html#raising-exceptions
这可能是一个非常愚蠢的错误,但唉,我对 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]))
即使它不在一个而是两个 catch 块内,也会被抛出。我试图弄清楚问题可能是什么,我们将不胜感激。
这是回溯:
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
您的外部异常处理程序的最后一行是 raise
,它将重新引发最后一个异常,这显然是在尝试调用 m.setDetailedText
。那失败了,但它的异常现在是最近的,并且在你最后点击 raise
时重新引发。
要引发原始异常,请将其从 raise
更改为 raise ex
根据文档,您的最后一条语句 raise
将重新引发之前的异常。
https://docs.python.org/2/tutorial/errors.html#raising-exceptions