1.异常简介
异常是指在语法正确的前提下,程序运行时报错就是异常。
当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。
怎样能让程序发生异常时,不让程序停止,能正常运行呢?如下效果,就需要捕获异常。
2.捕获异常
基本语法:
try:
...代码1...
...代码2...
...代码3...
except 异常类型:
try中一旦检测到异常,就执行这个位置的逻辑
执行流程:
先执行try中的代码,如果代码2报错,则不会执行代码3,而是执行except中的异常代码。
练习:
try:
print('start...')
print(1/0)
print('end....')
except ZeroDivisionError:
print('您的除数为0了')
print('allend...')
注意事项:
如果发生的异常类型和捕获的异常类型不相同,还是不能捕获异常,程序还会报错。
3.捕获多个异常
异常捕获流程: 依次捕获异常,直到捕获到对应的异常。
多分支结构格式:
try:
执行的代码...
except 异常类型:
捕获异常1
except 异常类型 :
捕获异常2
except 异常类型:
捕获异常3
...
第一种情况:
第二种情况:
元组形式结构:
try:
执行的代码...
except(异常类型1,异常类型2,异常类型3):
捕获异常...
不会指出具体的异常,只能捕获
try:
print('程序开始了')
print(1/0)
print('哈哈哈')
lst=[]
print(lst[1])
print('azyazy')
except (IndexError,ZeroDivisionError):
print('程序出错了')
print('程序结束了。。。')
4.获取异常的信息描述
'''
获取异常信息描述格式:
try:
...代码1...
...代码2...
...代码3...
except 异常类型 as 变量名:
...代码4...
'''
注意变量名中保存的是异常信息
try:
print(1/0)
except ZeroDivisionError as e:
print('捕获到了异常')
print(e)
2.捕获所有异常
(1)方式一
'''
try:
...代码...
...代码...
except:
...代码...
'''
注意except后什么都不用写
try:
print(1/0)
lst=[]
print(lst[1])
except:
print('捕获到了所有异常')
print('程序结束了')
(2)方式二
'''
try:
...代码...
...代码...
except Exception:
...代码...
'''
运用父类Exception的方式
try:
print(1/0)
lst=[]
print(lst[1])
except Exception:
print('捕获到了所有异常')
print('程序结束了')
3.try...else结构
'''
try:
...代码1...
...代码2...
except ZeroDivisionError:
...代码3...
else:
...代码4...
'''
没有捕获到异常的时候,执行else语句
未执行else
try:
print(1/0)
except ZeroDivisionError:
print('又报错了哦')
else:
print('您的正确性极高,O(∩_∩)O哈哈~')
print('程序结束了。。。')
执行else
try:
print('azy')
except ZeroDivisionError:
print('又报错了哦')
else:
print('您的正确性极高,O(∩_∩)O哈哈~')
print('程序结束了。。。')
4.try...finally结构
'''
try:
...代码1...
...代码2...
except ZeroDivisionError:
...代码3...
finally:
...代码4...
'''
try:
print(1/0)
except ZeroDivisionError:
print('又报错了哦')
finally:
print('此乃通向人生巅峰的必经之路哦')
print('程序结束了。。。')
无论有没有异常finally下的代码始终执行
try:
print('xxx')
except ZeroDivisionError:
print('又报错了哦')
finally:
print('此乃通向人生巅峰的必经之路哦')
print('程序结束了。。。')
5.抛出系统异常
需求:
当输入的用户名少于3位时,循环重新输入,直到正确,然后再输入密码,最后打印出用户名和密码
一般做法
while True:
name=input('请输入用户名(不能少于3位)')
if len(name)<3:
print('长度少了,亲')
continue
else:
pwd=input('请输入密码')
print(name,pwd)
抛出系统异常
while True:
try:
name=input('请输入用户名(不能少于3位)')
if len(name)<3:
raise Exception('长度少了,亲')#手动抛出异常
else:
pwd=input('请输入密码')
print(name,pwd)
except Exception as e:
print('xxx')
print(e)