上一篇:序列化和反序列化 | 手把手教你入门Python之七十五
下一篇:面向对象案例练习 | 手把手教你入门Python之七十七
本文来自于千锋教育在阿里云开发者社区学习中心上线课程《Python入门2020最新大课》,主讲人姜伟。
异常的概念
程序在运⾏过程中,由于我们的编码不规范,或者其他原因⼀些客观原因,导致我们的程序⽆法继续运⾏,此时,程序就会出现异常。如果我们不对异常进⾏处理,程序可能会由于异常直接中断掉。为了保证程序的健壮性,我们在程序设计⾥提出了异常处理这个概念。
读取文件异常
在读取⼀个文件时,如果这个文件不存在,则会报出 FileNotFoundError
错误。
除数为零异常
出现ZeroDivisionError
异常
程序在运⾏过程中会经常遇到类似的异常,如果我们不进⾏处理,此时程序就会中断并退出。为了提⾼程序的健壮性,我们可以使⽤异常处理机制来解决程序运⾏过程中可能出现的问题。
try...except语句
try...except语句可以对代码运⾏过程中可能出现的异常进⾏处理。 语法结构:
try:
可能会出现异常的代码块
except 异常的类型:
出现异常以后的处理语句
示例:
try:
f = open('test.txt', 'r')
print(f.read())
except FileNotFoundError:
print('⽂件没有找到,请检查⽂件名称是否正确')
try...else语句
咱们应该对else并不陌⽣,在if中,它的作⽤是当条件不满⾜时执⾏的实⾏;同样在try...except...中也是如此,即如果没有捕获到异常,那么就执⾏else中的事情
def div(a, b):
return a / b
try:
x = div(5 / 0)
except Exception as e:
print('程序出错了!!!!')
else:
print('计算的结果是', x)
finally关键字的使用
file = open('../02-视频/03-练习3.mp4', 'rb')
try:
while True:
content = file.read(1024)
if not content:
break
print(content)
finally: # 最终都会被执行的代码
print('文件被关闭了')
file.close()
finally的注意事项:
def test(a, b):
x = a + b
return x # 一旦return 就表示函数结束
return 'hello' # 这段代码不会被执行,一般情况下,一个函数最多只能执行一个return
def demo(a, b):
try:
x = a / b
except ZeroDivisionError:
return '除数不能为0'
else:
return x
finally:
return 'good' # 如果函数里有finally,finally的返回值会覆盖之前的返回值
print(demo(1, 2)) # 0.5
# print(demo(1, 0)) # 除数不能为0,None
try..finally语句
try...finally...语句⽤来表达这样的情况:
在程序中,如果⼀个段代码必须要执⾏,即⽆论异常是否产⽣都要执⾏,那么此时就需要使⽤finally。⽐如⽂件关闭,释放锁,把数据库连接返还给连接池等。
try:
f = open('test.txt')
try:
while True:
content = f.readline()
if len(content) == 0:
break
print(content)
except:
#如果在读取⽂件的过程中,产⽣了异常,那么就会捕获到
#⽐如 按下了 ctrl+c
pass
finally:
f.close()
print('关闭⽂件')
except:
print("没有这个⽂件")
说明:
我们可以观察到KeyboardInterrupt异常被触发,程序退出。但是在程序退出之前,finally从句仍然被执⾏,把⽂件关闭。
异常使用场景
解决输入不是数字以及输入年龄非整数的问题。
age = input('请输入您的年龄:')
try:
age = float(age)
except ValueError as e:
print('输入的不是数字')
else:
if age > 18:
print('欢迎来到我的网站')
else:
print('未满18岁,请自动离开')