# 语法:
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 2017-11-08 15:41  super2feng  阅读(268)  评论(0)    收藏  举报