AttributeError 试图访问一个对象没有的树形,好比foo.x,可是foo没有属性x IOError 输入/输出异常;基本上是没法打开文件 ImportError 没法引入模块或包;基本上是路径问题或名称错误 IndentationError 语法错误(的子类) ;代码没有正确对齐 IndexError 下标索引超出序列边界,好比当x只有三个元素,却试图访问x[5] KeyError 试图访问字典里不存在的键 KeyboardInterrupt Ctrl+C被按下 NameError 使用一个还未被赋予对象的变量 SyntaxError Python代码非法,代码不能编译(我的认为这是语法错误,写错了) TypeError 传入对象类型与要求的不符合 UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是因为另有一个同名的全局变量, 致使你觉得正在访问它 ValueError 传入一个调用者不指望的值,即便值的类型是正确的
基本写法:安全
try: .......要执行的代码 except '写入异常的类型': ..........跳过异常
异常类只能用在指定的异常状况,若是不能肯定异常的类型是不能使用的。服务器
万能捕获异常:spa
Exception 这个异常确实能捕捉全部的异常,可是出现的全部异常都只能执行Exception下的代码。若是需求是出现什么异常就走该异常下的代码,就要换多分支的异常捕捉。 code
try: print('-------') print('-------') print('-------') print(y) print('======') except NameError: print('11111') except Exception as n: #Exception万能捕捉异常 print(n)
多分支:对象
try: print('-------') print('-------') print('-------') print(x) print('======') except KeyError: pass except NameError as n: #类型:值,能够理解成k:v print(n) else:#当try的代码执行没有报错,就会执行这个代码 print('没有异常的时候就执行这个代码......') finally: #不能tey except 的执行结果,最后都会执行这个代码 print('最后执行的代码,作清理的代码...')
为异常类附变量blog
try: print(yy) eccept NameError as n: #NameError as n pass
也能够在多分支后面来一个Exception 索引
try: print('-------') print('-------') print('-------') print(y) print('======') except NameError: pass except KeyError: pass except ValueError: pass except Exception: #Exception万能捕捉异常 print() ''' Python就是逐行读取 '''
异常的其余语句写法:开发
try: .....except:.....else:....finally:.....it
try: print('-------') print('-------') print('-------') print(x) print('======') except KeyError: pass except NameError as n: #类型:值,能够理解成k:v print(n) else:#当try的代码执行没有报错,就会执行这个代码 print('没有异常的时候就执行这个代码......') finally: #不能tey except 的执行结果,最后都会执行这个代码 print('最后执行的代码,作清理的代码...')
finally:清理,好比:用户登录在输入帐户或密码错误的时候,就应该要将该页面从服务器端清理掉,否则当用户反复的去调取,就会使服务端死机。io
主动抛出异常:
try: raise TypeError('没有这个key值') except KeyError: pass ''' Traceback (most recent call last): raise TypeError('没有这个key值') TypeError: 没有这个key值 '''
自定义异常报错:
class ad(BaseException): def __init__(self,msg): self.msg=msg def __str__(self): return self.msg try: raise ad('类型错误') except ad as e: print(e)
断言:
在开发一个程序时候,与其让它运行时崩溃,不如在它出现错误条件时就崩溃(返回错误)。这时候断言assert
就显得很是有用。
x = 1 y = 1 assert x == 4 #当不知足的时候,就不会往下执行代码, print(11111)
使用try..except的方式
1:把错误处理和真正的工做分开来
2:代码更易组织,更清晰,复杂的工做任务更容易实现;
3:毫无疑问,更安全了,不至于因为一些小的疏忽而使程序意外崩溃了;
尽可能少使用try....except,由于他的可读性差。