第十四讲 异常和设计模式
一、异常
异常:是指在语法正确的前提下,程序运行时报错。
当python脚本发生错误的时候,我们需要捕获处理它,否则程序就会终止运行。
print("开始") #开始
print(1/0) #ZeroDivisionError: division by zero,程序报错,然后停止运行。
print("结束") #没有运行
ValueError数值异常
try:
a = int(input("请输入a:"))
b = int(input("请输入b:"))
c = a + b
print(c)
except ValueError as f:
print("ValueError数值异常")
print(f)
print("结束")
TypeError类型异常
try:
a = input("请输入a:")
b = int(input("请输入b:"))
c = a > b
print(c)
except TypeError as f:
print("TypeError类型异常")
print(f)
ZeroDivisionError除零异常
try:
a = eval(input("请输入表达式:")) #输入1/0
print(a)
except ZeroDivisionError as e:
print("ZeroDivisionError异常")
print(e)
二、异常捕获
捕获异常:想让程序发生异常时,不停止程序,就需要捕获异常。
1、基本语法
"""
try: 程序从上往下运行,先执行try中的代码,
...代码1... 如果代码1报错,则不会执行代码2和3,
...代码2... 直接执行except中的异常代码.
...代码3...
except 异常类型 as e: 如果try中没有报错,则不执行except中的代码
代码
"""
try:
print("开始") #开始
print(1/0) #程序发生异常
print("结束") #没有运行
except ZeroDivisionError as e: #捕获异常
print(e) #输出异常信息
print("结束")
注意:如果发生的异常类型与捕获的异常类型不同,是不能捕捉到异常的,程序会报错停止。
try:
a = eval(input("请输入表达式:"))
print(a)
b = [2,3]
print(b[2])
except ZeroDivisionError as e:
print("ZeroDivisionError异常")
print(e)
print("结束")
2、捕获多个异常
如果一段代码中可能会触发多个异常,我们可以写一个try多个except来捕获多个异常。
①、多分支结构
"""
try: 程序从上往下运行,先执行try中的代码,
执行代码1 如果try代码没有出错,则不会执行except中的异常代码。
执行代码2 如果try中代码出错了,程序会依次和excep中的异常类型比较,
执行代码3 如果try中的异常类型和excep的异常类型匹配,
...... 则执行捕获异常代码,其他代码则不再执行。
except 异常类型1:
代码
except 异常类型2:
代码
except 异常类型3:
代码
......
"""
try:
a = eval(input("请输入表达式:"))
print(a)
b = [2,3]
print(b[2])
except ZeroDivisionError as e:
print("ZeroDivisionError除零异常",e)
except IndexError as f:
print("IndexError索引异常",f)
except NameError as g:
print("NameError标识符异常",g)
print("结束")
②、元组结构