2017-04-26 17 views
2

有没有办法找出哪些Python的方法可以提高其意外事件或错误?我在官方的Python文档中没有发现太多内容。有没有办法找出哪些Python的方法可以提高其异常或错误

+0

事实上,任何事情都会引发异常,特别是在您传递它无法处理的参数时。 –

+0

通过“哪个Python方法可以引发哪个异常或错误”,你是指哪种方法_will_提高它,或者只是有能力提高它? –

+1

我指的是Excpetions /错误其可能可以通过特定的方法升高。 – no0by5

回答

6

一般来说,答案是否定的。有些例外情况是有记录的,但大多数只是遵循可以学习的一般模式。 的SyntaxError首先检查并提出了语法上是无效的代码。当一个变量是未定义的(未分配尚未或拼写错误)NameError出现。 类型错误提高了错误的参数数目或不匹配的数据类型。 ValueError异常装置的类型是正确的,但该值不为功能意义(即,负向输入math.sqrt()。如果该值是在一个序列中查找索引,IndexError上升。如果值是一个映射查找的关键,KeyError异常提高。另一种常见的例外是AttributeError的为缺少的属性。的IOError是失败的I/O,而且OSERROR的操作系统错误。

除了学习常见模式,通常只需运行一个函数并查看它在给定的cir中引发的异常就很容易cumstance。

通常,函数无法知道或记录所有可能的错误,因为输入可能会引发它们自己的异常。考虑一下这个功能:

def f(a, b): 
    return a + b 

它可以提高类型错误如果参数的数目是错误的,或者如果一个不支持__add__方法。但是,基础数据可能会引发不同的例外情况:

>>> 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

您可以__name__发现异常的名称,例如:

try : 
    some_function() 
except Exception as ex : 
    print('function: {0}, exception: {1}'.format(some_function.__name__, type(ex).__name__)) 
相关问题