python - 有没有办法找出哪个 Python 方法可以引发哪个异常或错误

标签 python function exception methods

有没有办法找出哪个 Python 方法可以引发哪个异常或错误?我在官方 Python 文档中没有找到太多相关信息。

最佳答案

一般来说,答案是否定的。一些异常被记录在案,但大多数只是遵循可以学习的一般模式。 SyntaxError 首先被检查,并在语法无效代码时引发。 NameError 在变量未定义(尚未分配或拼写错误)时出现。 TypeError 因参数数量错误或数据类型不匹配而引发。 ValueError 表示类型正确,但该值对函数没有意义(即 math.sqrt() 的负输入。如果该值是序列查找中的索引,引发 IndexError。如果值是映射查找的键,则引发 KeyError。另一个常见的异常是缺少属性的 AttributeErrorIOError 用于失败的 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/

相关文章:

python - 将输出(上下文)嵌入保存在 word2vec(gensim 实现)中作为最终模型

python - 如何使用 OpenCV 和 Python 在视频流中逐帧处理视频图像

c++ - Boost.Python : how to create & return a list of existing c++ objects, 没有复制

linux - 异常处理程序的实际代码驻留在 Linux 中的什么位置?

java - 使用 JUnit 4 注释测试多个异常

java - 处理 RestClientException 和 HttpClientErrorException

python - 如何使用pyspark中的reduceByKey将元素追加到列表中

javascript - 验证 JavaScript 函数名称

ios - 全局函数和 AppDelegate 类的 performSelector 错误

javascript - 我需要相当于 .load() 的 JS