天天看点

异常的概念 | 手把手教你入门Python之七十六

上一篇: 序列化和反序列化 | 手把手教你入门Python之七十五 下一篇: 面向对象案例练习 | 手把手教你入门Python之七十七 本文来自于千锋教育在阿里云开发者社区学习中心上线课程 《Python入门2020最新大课》 ,主讲人姜伟。

异常的概念

程序在运⾏过程中,由于我们的编码不规范,或者其他原因⼀些客观原因,导致我们的程序⽆法继续运⾏,此时,程序就会出现异常。如果我们不对异常进⾏处理,程序可能会由于异常直接中断掉。为了保证程序的健壮性,我们在程序设计⾥提出了异常处理这个概念。

读取文件异常

在读取⼀个文件时,如果这个文件不存在,则会报出

FileNotFoundError

错误。

异常的概念 | 手把手教你入门Python之七十六

除数为零异常

出现

ZeroDivisionError

异常

异常的概念 | 手把手教你入门Python之七十六

程序在运⾏过程中会经常遇到类似的异常,如果我们不进⾏处理,此时程序就会中断并退出。为了提⾼程序的健壮性,我们可以使⽤异常处理机制来解决程序运⾏过程中可能出现的问题。

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岁,请自动离开')           

配套视频