有没有办法找出哪个Python方法可以引发哪个异常或错误?我在官方Python文档中找不到相关内容。
答案 0 :(得分:6)
一般来说,答案是否定的。一些例外情况已记录在案,但大多数情况只是遵循可以学习的一般模式。首先检查 SyntaxError ,并引发语法无效的代码。当变量未定义(尚未分配或拼写错误)时,会出现 NameError 。针对错误数量的参数或不匹配的数据类型引发 TypeError 。 ValueError 表示类型是正确的,但该值对函数没有意义(即对math.sqrt()的负输入。如果该值是序列查找中的索引,<引发了em> IndexError 。如果该值是映射查找的键,则引发 KeyError 。另一个常见的例外是缺少属性的 AttributeError 。 IOError 用于I / O失败。 OSError 用于操作系统错误。
除了学习常见模式之外,通常很容易运行一个函数并查看它在特定环境中引发的异常。
通常,函数无法知道或记录所有可能的错误,因为输入可能会引发自己的异常。考虑这个功能:
def f(a, b):
return a + b
如果参数数量错误或 a 不支持__add__
方法,它可以引发 TypeError 。但是,基础数据可以引发不同的例外:
>>> f(10)
Traceback (most recent call last):
File "<pyshell#3>", line 1, in <module>
f(10)
TypeError: f() takes exactly 2 arguments (1 given)
>>> f(10, 20)
30
>>> f('hello', 'world')
'helloworld'
>>> f(10, 'world')
Traceback (most recent call last):
File "<pyshell#6>", line 1, in <module>
f(10, 'world')
File "<pyshell#2>", line 2, in f
return a + b
TypeError: unsupported operand type(s) for +: 'int' and 'str'
>>> class A:
def __init__(self, x):
self.x = x
def __add__(self, other):
raise RuntimeError(other)
>>> f(A(5), A(7))
Traceback (most recent call last):
File "<pyshell#13>", line 1, in <module>
f(A(5), A(7))
File "<pyshell#2>", line 2, in f
return a + b
File "<pyshell#12>", line 5, in __add__
raise RuntimeError(other)
RuntimeError: <__main__.A instance at 0x103ce2ab8>
答案 1 :(得分:1)
您可以使用__name__
找到例外的名称,例如:
try :
some_function()
except Exception as ex :
print('function: {0}, exception: {1}'.format(some_function.__name__, type(ex).__name__))