python-19-异常处理

python-19-异常处理

一.说明

这篇是python中的基础系列的异常处理?为什么要异常处理?因为python脚本在运行时,发生异常我们就需要捕获异常进行处理,否则整个程序就会终止!

那么如何进行异常处理,在python中提供2种处理方式:

1.捕获:通过tryexceptelsefinally语句来实现

2.断言:自定义异常,使用 raise 语句

二.捕获

  1. 基本结构

    try:尝试执行一段可能会抛出异常的代码。

    except:捕获并处理指定的异常。如果没有指定,默认会捕获所有异常。

    else:如果try代码块没有引发异常,则执行这部分代码。

    finally:无论是否发生异常,这部分代码都会被执行,通常用于清理资源。

  2. 示例

    try:
        # 尝试执行可能会引发异常的代码
        numerator = 10
        denominator = 0
        result = numerator / denominator
    except ZeroDivisionError:
        # 处理特定的异常
        print("错误:除数不能为零!")
    except Exception as e:
        # 处理其他未指定的异常
        print(f"发生了其他错误:{e}")
    else:
        # 如果没有异常发生,执行这部分代码
        print("计算结果是:", result)
    finally:
        # 无论如何都会执行
        print("程序执行完毕。")
        
        
        
    ###处理多个异常
    try:
        # 可能引发多种异常的代码
        num = int(input("请输入一个数字: "))
        print(10 / num)
    except (ValueError, ZeroDivisionError) as e:
        print(f"输入错误:{e}")
    
    

    注意:用except Exception可以捕获所有异常

三.断言

什么是断言?其实就是自定义异常,通过raise语句来完成,但是会分为 引发现有异常、引发自定义异常、引发特定异常

  1. 引发现有异常

    try:
        x = 1 / 0  # 这会引发 ZeroDivisionError
    except ZeroDivisionError as e:
        print("捕获到异常:", e)
        raise  # 重新抛出异常
    
  2. 引发自定义异常

    class MyError(Exception):
        pass
    
    def check_value(x):
        if x < 0:
            raise MyError("输入的值不能小于零!")
    
    try:
        check_value(-1)  # 这会引发 MyError
    except MyError as e:
        print("捕获到自定义异常:", e)    #捕获到自定义异常: 输入的值不能小于零!
    
    
  3. 引发特定的异常

    def divide(a, b):
        if b == 0:
            raise Exception("除数不能为零!")
        return a / b
    
    try:
        divide(10, 0)  # 这会引发 ValueError
    except Exception as e:
        print("捕获到异常:", e)  #捕获到异常: 除数不能为零!
        
        
        
    ###########
    try:
        x = 1 / 0
    except ZeroDivisionError as e:
        raise ValueError("发生了一个值错误") from e
    

四.python所有标准异常类

异常名称描述
BaseException所有异常的基类
SystemExit解释器请求退出
KeyboardInterrupt用户中断执行(通常是输入^C)
Exception常规错误的基类
StopIteration迭代器没有更多的值
GeneratorExit生成器(generator)发生异常来通知退出
SystemExitPython
Python解释器请求退出
StandardError所有的内建标准异常的基类
ArithmeticError所有数值计算错误的基类
FloatingPointError浮点计算错误
OverflowError数值运算超出最大限制
ZeroDivisionError除(或取模)零
AssertionError断言语句失败
AttributeError对象没有这个属性
EOFError没有内建输入,到达EOF
EnvironmentError操作系统错误的基类
IOError输入/输出操作失败
OSError操作系统错误
WindowsError系统调用失败
ImportError导入模块/对象失败
KeyboardInterrupt用户中断执行(通常是输入^C)
LookupError无效数据查询的基类
IndexError序列中没有没有此索引(index)
KeyError映射中没有这个键
MemoryError内存溢出错误(对于Python
NameError未声明/初始化对象
UnboundLocalError访问未初始化的本地变量
ReferenceError弱引用(Weak reference)试图访问已经垃圾回收了的对象
RuntimeError一般的运行时错误
NotImplementedError尚未实现的方法
SyntaxError语法错误
IndentationError缩进错误
TabErrorTab和空格混用
SystemError一般的解释器系统错误
TypeError对类型无效的操作
ValueError传入无效的参数
UnicodeErrorUnicode相关的错误
UnicodeDecodeErrorUnicode解码时的错误
UnicodeEncodeErrorUnicode编码时错误
UnicodeTranslateErrorUnicode转换时错误
Warning警告的基类
DeprecationWarning关于被弃用的特征的警告
FutureWarning关于构造将来语义会有改变的警告
OverflowWarning旧的关于自动提升为长整型(long)的警告
PendingDeprecationWarning关于特性将会被废弃的警告
RuntimeWarning可疑的运行时行为(runtime behavior)的警告
SyntaxWarning可疑的语法的警告
UserWarning用户代码生成的警告

五.总结

Python 异常处理就介绍这么多,没啥复杂内容,如果不添加则突然出现意外情况,则会导致整个程序终止!

所以在我们没有把握的情况下,可以对异常进行提前捕获!避免程序终止!

创作整理不易,请大家多多关注 多多点赞,有写的不对的地方欢迎大家补充,我来整理,再次感谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SEEONTIME

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值