一木.溪桥 在Logic Education跟Amy学Python
逻辑教育 :https://logicedu.ke.qq.com
12期:Python基础课
一木.溪桥学Python-14:异常捕获
日期:2021年1月19日
- 本文内容:来至Amy老师的语雀分享!在此表示感谢!
学习目标:
- 异常
- 异常捕获
学习内容:
异常
介绍
-
当Python无法正常处理程序时就会发生一个异常,会影响程序的正常执行。
异常也是Python对象,表示一个错误。
异常捕获
- 当Python脚本有发生异常的可能时,就需要捕获异常,避免程序终止执行。
语法
try:
正常程序执行此块代码
except:
抛出错误执行此代码块
练习
- 将以下代码进行异常捕获
- 当代码异常时,将ipt赋值为1
ipt = input("请输入:")
ipt = float(ipt)
print(ipt)
- 代码如下:
try:
# 正常程序时执行代码块
ipt = input("请输入:")
ipt = float(ipt)
print(ipt)
except:
# 异常程序时执行代码块
ipt = 1
print(ipt)
异常类型捕获
-
但是仅仅使用以上异常捕获,虽然不会报错终止程序。但是无法记录下具体异常种类。如需记录下具体异常种类,则需要捕获该具体异常。
-
语法:
try:
pass
except 当前异常对象 as e: # e = 当前异常对象
print(e)
- 练习
- 捕获以下代码的异常类型并输出
li = [1, 2, 3]
li[3] # IndexError
- 代码如下:
try:
li = [1, 2, 3]
li[3] # IndexError
except IndexError as e:
print(e) # list index out of range
- 需要注意的是,该捕获方式仅能捕获IndexError这一类异常。那么实际上,这种细分的异常种类有很多,可以通过其共同父类Exception捕获输出。
try:
# li = [1,2,3]
# li[3]
int('a')
except Exception as e:
print(e) # invalid literal for int() with base 10: 'a'
try-except-else
- 如果抛出异常执行except内部代码
- 如果程序正常执行else内部代码
try-finally
不管程序有无发生异常,都将执行finally内部代码。
主动触发异常
在实际开发中,在程序不满足某条件时,通常会主动抛出异常。
- 语法
raise Exception()
-
练习
判断煎饼熟了没,当烹饪时间小于5时,则主动触发没熟异常;否则熟了。
def test(level):
if level<5:
raise Exception("没熟没熟")
try:
test(5)
except Exception as e:
print(e)
else:
print("熟了 请吃")
定义异常
-
当需要自定义满足一些规则时,就可以自定义异常。
-
自定义异常通过创建一个新的异常类,自定义名字与内容,并且需要继承Exception类实现。
-
练习
-
自定义OldAmyError异常类
class OldAmyError(Exception):
def __init__(self,msg):
self.message = msg
def __str__(self):
return self.message
# e = OldAmyError("我错了")
# print(e)
try:
raise OldAmyError("我错了")
except OldAmyError as e:
print(e)
断言
-
assert断言用于判断一个表达式,当表达式条件为False时触发断言异常AssertionError。一般用于强制用户服从。
-
当表达式条件不成立时:False,直接抛出异常,AssertionError。
-
当表达式条件成立时:Ture,执行下面的语句,但失去assert的意义。
-
注意,断言用于强制用户服从,可捕获,但是一般不捕获。
-
语法:
assert 断言
print("1"*10) # 输出:1111111111
assert "2.0" == 2 # False ,一般用于强制用户服从
print("1"*10) # AssertionError
End !
Best wishes for you!