• 三十分钟带你玩转Python异常处理


    什么是异常?

    异常即一个事件,该事件会在程序运行中执行,如果程序遇到异常而没有及时捕获该异常程序就会抛出错误,也就是报错。

    而异常处理可以让我们的代码更加的健壮,简单说就是:异常是错误出现时,可以在正常的控制流程以外采取的行为。

    try-except 语句

    语法

    try:
    	执行正常代码
    except[异常类型可选]:
    	执行异常代码

    异常示例

    num = int(input('Please enter a number:'))
    if num < 18:
        print("I'm sorry, you're underage!")
    else:
        print("Congratulations, you've come of age!")

    对于这个程序而已,如果输入一个非整数数字那将会抛出字符无效的异常,假设输入abc将会得到以下异常;

    异常信息: ValueError: invalid literal for int() with base 10: ‘aba’

    ValueError:异常类型,Python有很多内置的异常类可在标准库中查找;

    异常处理

    下面我们改善一下它,让它变得更加的健壮!

    # 一 不打印报错信息
    """
    try:
        num = int(input('Please enter a number:'))
        if num < 18:
            print("I'm sorry, you're underage!")
        else:
            print("Congratulations, you've come of age!")
    except:
    	# 程序发送异常时执行
        print("Please input properly!")
    """
    
    # 二 打印异常信息
    # 注意,这里我添加了异常检测类型
    # 如果程序比较复杂推荐打印异常信息,然后写入日志。
    try:
        num = int(input('Please enter a number:'))
        if num < 18:
            print("I'm sorry, you're underage!")
        else:
            print("Congratulations, you've come of age!")
    except ValueError as error:
        # 程序发送异常时执行
        print('异常信息:', error)

    try-except-else 语句

    你可以注意到了就是 try-except 多加了一个 else ,不错不过这个 else 大有用处!

    语法

    try:
        执行正常代码(检测与捕获)
    except:
    	执行异常代码
    else:
    	执行正常代码(无异常正常处理)

    示例

    try:
        num = int(input('Please enter a number:'))
    except ValueError as error:
        print('异常信息:', error)
    else:
        if num < 18:
            print("I'm sorry, you're underage!")
        else:
            print("Congratulations, you've come of age!")

    这样做的好处是只需要检测会出现异常的代码块,减少代码的冗余,让程序的可读性更佳!

    try-except-finally 语句

    语法

    try:
    	执行正常代码
    except[异常类型可选]:
        执行异常代码
    finally:
    	不管是不是异常都会执行

    示例

    try:
        file = open('new.txt', 'w')
        content = 'Hello, Python'
        file.write(content)
    except:
        print('在进行文件操作时,遇到了异常!')
    finally:
        file.close()

    这里我打开了一个文件,并往里面写入内容,但当程序出现异常时我希望把打开的文件释放掉这时可以用 finally 。

    处理多个异常

    废话少说,直接上代码

    try:
        age = int(input('请输入你的年龄:'))
        x = 10 / age
        print(x)
    # 如果捕获了该异常,则边的异常不再捕获
    except ValueError:
        print('别闹, 快输入整数!')
    #0 是不能被作为除数的,所以我们也需要捕获该异常
    except ZeroDivisionError:
        print('请输入合理的年龄!')

    简化型

    try:
        age = int(input('请输入你的年龄:'))
        x = 10 / age
        print(x)
    # 多个异常类型捕获需使用元组将其包括
    except (ValueError, ZeroDivisionError):
        print('请输入一个合理的年龄!')

    raise 主动抛出异常

    示例

    age = int(input('请输入一个年龄:'))
    if age < 18:
        raise ValueError('你还没成年!')
    print('Continue')

    注意: 主动抛出异常语句慎用

    自定义异常

    # 自定义异常
    class ValidateError(ValueError):
        def __init__(self, userdata):
            super().__init__(userdata)
    
    # 登录验证
    def login(user, password):
        if user == '' or password == '':
            raise ValidateError('账号密码不能为空!')
        if user != 'andy' or password != '123456':
            raise ValidateError('账号密码不正确!')
    
    
    user = input('请输入你的用户名:')
    password = input('请输入你的密码:')
    try:
        login(user, password)
    except ValidateError as e:
        print(e)
    else:
        print('登录成功!')
  • 相关阅读:
    Android 7.1.2 更换原生输入法
    FFMpeg 命令
    从入门到精通,30天带你学会C++【第七天:for循环和while循环以及数组的学习】(学不会你找我)
    PhotoShop 选中区域 变透明 透明化 导出图片
    CE修改器入门:运用代码注入
    存储压测工具— — Cosbench教程
    Java版分布式微服务云开发架构 Spring Cloud+Spring Boot+Mybatis 电子招标采购系统功能清单
    音视频入门基础:H.264专题(5)——FFmpeg源码中 解析NALU Header的函数分析
    iOS 17.4 Not Installed
    docker部署的nginx配置ssl证书https
  • 原文地址:https://blog.csdn.net/nnn0245/article/details/126953998