# 语法: try: code except Error as e: print('xxx error.') except (Error1,Error2) as e: print('xxx') except Exception as e: print('unknown error:',e) else: print('Everything is ok, without error.') finally: print('Executed anyway')
代码范例:
try: # name = [] # nae[2] date = {} date['name'] except IndexError as e: print('Index is illegal:',e) except NameError as e: print('There is an error name:',e) except BaseException as e: print('Unknown error:',e) else: print('Everything is ok, without error!') finally: print("Excuted anyway.") # 输出: Unknown error: 'name' Excuted anyway.
注意:
· 有一些错误是无法捕捉到的,比如代码缩进错误'IndentationError',因为捕捉异常的前提是解释器正常解释代码,缩进错误时,解释器无法正确识别代码,故无法往下执行捕捉。
· BaseException 是 Exception的父类。
· 没有异常时执行else后面的代码,finally后面的代码无论有没有异常都会执行。
自定义异常:
class FoneError(Exception): def __init__(self,msg): self.msg = msg # def __str__(self): # return 'MySQL connect timeout.' try: raise FoneError('connect timeout') except FoneError as e: print(e) # 输出: connect timeout
常用异常:
AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x IOError 输入/输出异常;基本上是无法打开文件 ImportError 无法引入模块或包;基本上是路径问题或名称错误 IndentationError 语法错误(的子类) ;代码没有正确对齐 IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5] KeyError 试图访问字典里不存在的键 KeyboardInterrupt Ctrl+C被按下 NameError 使用一个还未被赋予对象的变量 SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了) TypeError 传入对象类型与要求的不符合 UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,导致你以为正在访问它 ValueError 传入一个调用者不期望的值,即使值的类型是正确的
详细参照:
http://www.cnblogs.com/wupeiqi/articles/5017742.html
posted on
浙公网安备 33010602011771号