Python异常处理

内容分享1小时前发布
0 0 0

异常是指程序运行的过程中出现了错误,也是bug。异常处理是Python编程中超级重大的概念,它允许程序在遇到错误时优雅地处理问题,而不是直接崩溃。

使用try…except捕获异常

基本语法:

try:
    # 可能引发异常的代码
    result = 10 / 0
except ZeroDivisionError:
    # 处理特定异常
    print("不能除以零!")

捕获指定的异常:

try:
    print(1/0)
except ZeroDivisionError as z:
    print(f"出现了异常{z}")
print("程序继续")

处理多个异常:

try:
    number = int(input("请输入一个数字: "))
    result = 10 / number
except ValueError:
    print("输入的不是有效数字!")
except ZeroDivisionError:
    print("不能除以零!")
except Exception as e:
    # 处理其他所有异常
    print(f"发生了未知错误: {e}")

finally块

在异常处理中,finally块中的代码无论是否出现异常,都会执行。

有些时候,程序在try块里面打开了一些物理资源,如数据库连接、网络连接和磁盘文件等。这些物理资源都必须被显式回收。

try:
    # 可能引发异常的代码
    file = open("example.txt", "r")
    content = file.read()
    number = int(content)
    result = 100 / number
except FileNotFoundError:
    print("文件不存在!")
except ValueError:
    print("文件内容不是有效数字!")
except ZeroDivisionError:
    print("不能除以零!")
else:
    # 如果没有异常发生,执行这里的代码
    print(f"计算结果是: {result}")
finally:
    # 无论是否发生异常,都会执行这里的代码
    print("程序执行完毕")
    # 一般用于清理资源,如关闭文件、数据库连接等

抛出异常(raise)

当程序出现错误时,系统会自动引发异常。除此之外,Python也允许程序自行引发异常,自行引发异常使用raise语句来完成。一般是业务逻辑上,业务异常问题,可以自行引发异常。

语法格式:raise [exceptionName [(reason)]]

def process_value(value):
    if not isinstance(value, (int, float)):
        raise TypeError("参数必须是数字类型")
    if value < 0:
        raise ValueError("参数不能为负数")
    return value ** 2
 
try:
    result = process_value(-5)
except (TypeError, ValueError) as e:
    print(f"错误: {e}")

自定义异常

实际开发中,有时候系统提供的异常类型不能满足开发的需求。这时候你可以通过创建一个新的异常类来拥有自己的异常。异常类继承自Exception类,可以直接继承,或者间接继承。

#自定义异常类
class TooLongException(Exception):
 
    def __init__(self, length):
        self.length = length
 
    def __str__(self):
        return f"长度是:{self.length},超长了"
 
def name_test():
    try:
        name = input("请输入您的姓名:")
        if len(name) > 4:
            raise TooLongException(len(name))
        else:
            print(name)
    except TooLongException as tle:
        print("出现异常:",tle)
 
name_test()
'''
请输入您的姓名:12345
出现异常: 长度是:5,超长了
'''

异常的传递性

异常是具有传递性的,如果方法A调用方法B,方法B调用方法C,如果方法C代码出现异常,并且没有处理异常,则会传递给方法B,同理,如果B依然没有处理异常,则最终会传递给方法A。

def func():
    print("func开始")
    r = 1/0
    print("func结束")
 
def funb():
    print("funb开始")
    func()
    print("funb结束")
 
def funa():
    print("funa开始")
    funb()
    print("funa结束")
 
 
try:
    funa()
except Exception as e:
    print(e)
    
'''
输出:
funa开始
funb开始
func开始
division by zero
'''
© 版权声明

相关文章

暂无评论

none
暂无评论...