Python未捕获异常
由于某些原因,我的代码在抛出异常时没有捕获异常。我有Python未捕获异常,python,Python,由于某些原因,我的代码在抛出异常时没有捕获异常。我有 def trim_rad(rad): ... if not modrad.shape[0]: raise IndexError("Couldn't find main chunk") return modrad, thetas 之后我调用该函数: try: modrad, thetas = trim_rad(rad) except IndexError("Couldn't find main
def trim_rad(rad):
...
if not modrad.shape[0]:
raise IndexError("Couldn't find main chunk")
return modrad, thetas
之后我调用该函数:
try:
modrad, thetas = trim_rad(rad)
except IndexError("Couldn't find main chunk"):
return 0
但我还是得到了一个例外的回溯。我做错了什么?只捕获
索引器
try:
raise IndexError('abc')
except IndexError('abc'):
print 'a'
Traceback (most recent call last):
File "<pyshell#22>", line 2, in <module>
raise IndexError('abc')
IndexError: abc
try:
raise IndexError('abc')
except IndexError:
print 'a'
a # Output
如果还希望捕获错误消息,请使用以下语法:
try:
raise IndexError('abc')
except IndexError as err:
print err
abc
您提供了索引器的实例,但
除外。改为这样做:
try:
modrad, thetas = trim_rad(rad)
except IndexError:
print "Couldn't find main chunk"
return 0
以下是一个例子:
>>> try:
... [1][1]
... except IndexError('no'):
... pass
...
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
IndexError: list index out of range
>>> try:
... [1][1]
... except IndexError:
... pass
...
>>>
>>试试:
... [1][1]
... 除索引器(“否”)外:
... 通过
...
回溯(最近一次呼叫最后一次):
文件“”,第2行,在
索引器:列表索引超出范围
>>>尝试:
... [1][1]
... 除索引器外:
... 通过
...
>>>
更改
except IndexError("Couldn't find main chunk"):
到
你似乎捕捉到了错误的异常。如果捕获类型为的异常,下面的符号会将异常分配给e,以便您可以在except处理程序中读取描述
try:
modrad, thetas = trim_rad(rad)
except IndexError as e:
print e.message
return 0
您应该只将类型名放在那里,而不是该类型的实例。如果您想进一步缩小它的范围,只处理将要抛出的特殊的索引器
,而不使用常规的ole索引器
,请创建一个从索引器
继承的更窄的异常类型,并引发/捕获它。我很惊讶这不会导致类型错误。我以为我以前尝试过,除了1:
,但得到了一个TypeError,但现在尝试,它只是通过了。@user2357112显然它确实在Python 3中导致了一个TypeError:。不过你说得对,2分钟内没关系。x@Asad奇怪的是,没有任何警告说我做错了。因此,如果我想捕获该特定错误而不是其他索引器
,那么子类索引器
,或者解析消息并重新引发错误(如果不是指定的消息)是否更为标准?我只在这个例子中使用了这个错误,创建一个新的子类会不会有点过于繁重?@ari最好将indexer子类化(至少在IMO),但这完全取决于您。这两种方法都可以工作,尽管在关键的决策和控制流中使用字符串比较总是让我感到恶心。我不是Python专家,所以YMMV。请使用new-except表示法:except-indexer作为e:
Done,很抱歉
except IndexError:
try:
modrad, thetas = trim_rad(rad)
except IndexError as e:
print e.message
return 0