0
点赞
收藏
分享

微信扫一扫

python-19-一篇文章搞明白python异常处理

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  # 重新抛出异常

  1. 引发自定义异常

class MyError(Exception):
    pass

def check_value(x):
    if x < 0:
        raise MyError("输入的值不能小于零!")

try:
    check_value(-1)  # 这会引发 MyError
except MyError as e:
    print("捕获到自定义异常:", e)    #捕获到自定义异常: 输入的值不能小于零!

  1. 引发特定的异常

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)发生异常来通知退出

SystemExit

Python

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

Python

Python

语法错误

IndentationError

缩进错误

TabError

Tab

Tab

和空格混用

SystemError

一般的解释器系统错误

TypeError

对类型无效的操作

ValueError

传入无效的参数

UnicodeError

Unicode

Unicode

相关的错误

UnicodeDecodeError

Unicode

Unicode

解码时的错误

UnicodeEncodeError

Unicode

Unicode

编码时错误

UnicodeTranslateError

Unicode

Unicode

转换时错误

Warning

警告的基类

DeprecationWarning

关于被弃用的特征的警告

FutureWarning

关于构造将来语义会有改变的警告

OverflowWarning

旧的关于自动提升为长整型(long)的警告

PendingDeprecationWarning

关于特性将会被废弃的警告

RuntimeWarning

可疑的运行时行为(runtime behavior)的警告

SyntaxWarning

可疑的语法的警告

UserWarning

用户代码生成的警告

五.总结

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

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

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

举报

相关推荐

0 条评论