Python未捕获异常

2024-05-17 08:46:02 发布

您现在位置: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 chunk"):
    return 0

但我还是得到了一个例外的回溯。我做错什么了?


Tags: 代码returnifmaindefnot原因find
3条回答

你好像错了。如果捕获类型为的异常,则下面的符号将异常分配给e,以便您可以读取except处理程序中的描述。

try:
    modrad, thetas = trim_rad(rad)
except IndexError as e:
    print e.message
    return 0

你给了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
...
>>>

只捕获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

相关问题 更多 >