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

时间:2017-04-26 21:55:39

标签: python function exception methods

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

2 个答案:

答案 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__))