有没有办法找出哪个 Python 方法可以引发哪个异常或错误?我在官方 Python 文档中没有找到太多相关信息。
最佳答案
一般来说,答案是否定的。一些异常被记录在案,但大多数只是遵循可以学习的一般模式。 SyntaxError 首先被检查,并在语法无效代码时引发。 NameError 在变量未定义(尚未分配或拼写错误)时出现。 TypeError 因参数数量错误或数据类型不匹配而引发。 ValueError 表示类型正确,但该值对函数没有意义(即 math.sqrt() 的负输入。如果该值是序列查找中的索引,引发 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>
关于python - 有没有办法找出哪个 Python 方法可以引发哪个异常或错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43645187/