捕捉异常
基本捕捉异常语句
基本语法
try: #捕捉异常语句的开始
代码模块1 #正常需要执行的代码模块
except: #捕捉异常信息
代码模块2
捕捉异常实例
def print_D(dic):
i=0
try:
len1=len(dic)
while i<len1:
print(dic.popitem())
i+=1
except:
print("传递值类型出错,必须为字典值!")
print_D({1:'a',2:'b'})
print_D([1,2,3])
结果为:
(2, ‘b’)
(1, ‘a’)
传递值类型出错,必须为字典值!
带finally子句的异常处理
#格式:
try:
代码模块1
except:
代码模块2
finally:
代码模块3
try:
print(1/0)
except:
print("除数不能为0")
finally:
print("程序执行结束!")
除数不能为0
程序执行结束!
try:
print(1/2)
except:
print("除数不能为0")
finally:
print("程序执行结束!")
0.5
程序执行结束!
无论整除是否出错,finally子句后的代码都执行
finally的强制性
import sys
try:
1/0
except:
print("除数不能为0")
sys.exit() #退出当前程序
finally:
print("程序执行结束!")
print("是否能执行?")
没有执行最后一条语句,体现了finally的强制性
捕捉特定异常信息
格式:
except(Exception1[,Exception2[,…[ExceptionN]]])
ValueError 对象值不正确时触发该错误
IndexError 指定的字符串、元组、列表等序列对象的下标元素不存在时,触发该错误
NameError 指定的对象名不存在时,触发该错误
KeyError 指定的字典键不存在时,触发该错误
TypeError 提供了错误类型的对象时,触发该错误
ModuleNoFoundError 模块文件找不到或模块文件名写错时,触发该错误
SyntaxError 语法无效时,触发该错误
AttributeError 对象属性、方法引用或赋值不当时,触发该错误
try:
i+=1
except NameError:
print("i变量名先要初始定义,才能做自增运算")
i变量名先要初始定义,才能做自增运算
抛出异常
Python允许程序员自己触发异常,可以通过raise关键字来实现
不带参数的触发
raise
带参数的触发
i=‘1’
if type(i)!=int:
raise TypeError(‘i类型出错’)