python 异常处理
什么是异常
异常就是程序运行时发生错误的信号(在程序出现错误时,则会产生一个异常,若程序没有处理它,则会抛出该异常,程序的运行也随之终止)
异常的分类
分类一:针对语法上的异常,应该在程序执行前就解决掉
try: print('asdfasdf' except Exception: pass
分类二:逻辑异常,try...except
xxx #NameError int('xxxxxxx') #valueError l=[] l[111111] #IndexError d={} d['a'] #keyError 1/0 #ZeroDivisionError: import os os.xxxxxxxxxxx #AttributeError:
异常处理的方式 try ...except
import os try: print('===>1') print('===>2') l=[] # l[123] #IndexError print('===>3') d={} d['a'] #KeyError except IndexError as y: # print(x) # l[0] pass else: print('被检测的代码块没有发生异常时执行else的代码') print('====>4')
finally 不管是否报错都执行
try: print('===>1') print('===>2') cursor= connect(数据) cursor.excute(sql) cursor.excute(sql) cursor.excute(sql) cursor.excute(sql) print('===>3') d = {} except Exception: print('异常发生时执行的代码') # cursor.close() finally: #不管程序是否出错,都会执行finally的代码 cursor.close()
自定义异常
class EgonException(BaseException): def __init__(self,msg): self.msg=msg def __str__(self): return self.msg try: raise EgonException('类型错误') except EgonException as e: print(e)
断言 assert 条件
res=[] if len(res) > 0: res[0] res[1] else: # print('上一部分的代码有问题') raise PermissionError('xxxxx') #===== 使用assert方法== res=[] assert len(res) > 0 res[0] res[1]
异常的种类(常见)
AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x IOError 输入/输出异常;基本上是无法打开文件 ImportError 无法引入模块或包;基本上是路径问题或名称错误 IndentationError 语法错误(的子类) ;代码没有正确对齐 IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5] KeyError 试图访问字典里不存在的键 KeyboardInterrupt Ctrl+C被按下 NameError 使用一个还未被赋予对象的变量 SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了) TypeError 传入对象类型与要求的不符合 UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量, 导致你以为正在访问它 ValueError 传入一个调用者不期望的值,即使值的类型是正确的