7

出于某种原因,我的代码在抛出异常时没有捕获异常。我有

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

然而,我仍然得到那个例外的回溯。我究竟做错了什么?

4

4 回答 4

13

只抓住IndexError.

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:
    modrad, thetas = trim_rad(rad)
except IndexError:
    return 0

如果您也想捕获错误消息,请使用以下语法:

try:
    raise IndexError('abc')
except IndexError as err:
    print err


abc
于 2013-08-15T18:19:30.720 回答
10

你给出except了一个IndexError. 改为这样做:

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
...
>>>
于 2013-08-15T18:19:53.660 回答
3

您似乎错误地捕捉到了异常。您捕获类型的异常,下面的符号会将异常分配给 e,以便您可以阅读 except 处理程序中的描述。

try:
    modrad, thetas = trim_rad(rad)
except IndexError as e:
    print e.message
    return 0
于 2013-08-15T18:20:51.527 回答
2

改变

except IndexError("Couldn't find main chunk"):

except IndexError:
于 2013-08-15T18:20:29.077 回答