Python中的Exceptions是所有异常的基类,内置的异常类都放在了exceptions模块中,通过dir()函数可以看到这些内置的类
通过raise 语句触发异常,如
>>>raise Exception
>>>import exceptions
>>>dir(exceptions)
['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BufferError', 'BytesWarning', 'DeprecationWarning', 'EOFError', 'EnvironmentError', 'Exception', 'FloatingPointError', 'FutureWarning', 'GeneratorExit', 'IOError', 'ImportError', 'ImportWarning', 'IndentationError', 'IndexError', 'KeyError', 'KeyboardInterrupt', 'LookupError', 'MemoryError', 'NameError', 'NotImplementedError', 'OSError', 'OverflowError', 'PendingDeprecationWarning', 'ReferenceError', 'RuntimeError', 'RuntimeWarning', 'StandardError', 'StopIteration', 'SyntaxError', 'SyntaxWarning', 'SystemError', 'SystemExit', 'TabError', 'TypeError', 'UnboundLocalError', 'UnicodeDecodeError', 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError', 'UnicodeWarning', 'UserWarning', 'ValueError', 'Warning', 'ZeroDivisionError', '__doc__', '__name__', '__package__']
当代码遇到错误的时候,会逐层向上传播,如果没有捕捉异常的机制,错误会传递到全局变量的位置,导致程序报错终止.
在python中可以通过 try/except来捕捉异常,except 可以跟上内置的异常类,或者自定义的异常类
import exceptions
try:
print a
except NameError:
print '名字未定义'
也可以捕捉多个异常,用元组把它们列出来就可以了,另外如果要访问异常对象本身,except语句在加上一个参数就可以了如
import exceptions
try:
print a
except NameError,e:
print e
注意:在python 3.0中 except语句会写成 execpt NameError as e :
其他语句:
else语句: 只有在没有异常的情况下,else才会执行.
finally语句: 在异常处理语句中,都会执行.