一。异常
定义:程序出现了意想不到的情况。
注意:异常不解决,程序会奔溃,停止运行。
1)捕获异常
形式1(try...except...):
try 要运行的有可能发生异常的代码 :
代码
except 异常:
出现异常的时候要运行的代码(执行的操作),记录日志
注意:一旦 try 当中出现异常,立即调到 except 子句,try 剩下的代码不会再执行。
例子(不抛出异常):
try:
list_1= ['yuz', 'bt', 'wfe', 'fwo']
print(list_1[9])
except:
pass
运行结果(直接把异常接收了不会直接报错):
try:开始监控代码
except:接收异常
形式2(try...except Except as e)
try:
list_1= ['yuz', 'bt', 'wfe', 'fwo']
print(list_1[9])
except Exception as e:
print("list_1 这里执行出错了,错误是: {}".format(e))
运行结果:
形式3(try...except IndexError 或者 ValueError 等 ,若捕捉的错误不是对应类型,程序还是会停止的 需要不断试错并捕捉。注意:这里可以根据异常类型做不同的操作)
try:
list_1= ['yuz', 'bt', 'wfe', 'fwo']
print(list_1[9])
except IndexError as e:
print("list_1 这里执行出错了,IndexError 错误是: {}".format(e))
形式4(分组:try...except (IndexError,ValueError, KeyError))
try:
2 /0
list_1= ['yuz', 'bt', 'wfe', 'fwo']
print(list_1[9])
except (IndexError,NameError,SyntaxError,TypeError,ZeroDivisionError) as e:
print("list_1 这里执行出错了,ZeroDivisionError 错误是: {}".format(e))
运行结果:
形式5(finally:管有没有报错,fianally 都会执行的。try...except...finally)
try:
list_1 = ['yuz', 'bt', 'wfe', 'fwo']
print(list_1[9])
except Exception as err:
print("程序出现错误 {}".format(err))
finally:
print("已经完成")
运行结果:
形式6(抛出异常:raise):
try:
list_1= ['yuz', 'bt', 'wfe', 'fwo']
print(list_1[9])
except:
raise
运行结果:
注意:Exception 是捕捉常用异常(语法错误是不能捕捉的);在写程序时建议先不要对异常进行捕捉(捕捉后不抛出该异常根本不知道是什么类型的异常);
对每一种不同类型的异常分开处理;
常用的异常类型:
ImportError: 无法引入模块或包。
IndexError: 下标索引超出序列边界;
NameError: 使用一个还未赋予对象的变量;
SyntaxError: 代码逻辑语法出错,不能执行; 不能去捕获
TypeError: 传入的对象类型与要求不符;
ValueError: 传入一个不被期望的值,即使类型正确。
KeyError: 试图访问你字典里不存在的键。
IOError:输入输出异常.文件操作