Python 3中的异常捕获机制(try-except语句)

本文详细介绍了Python中的try-except语句及其用法,包括捕获单个、多个异常以及使用else和finally代码块。通过实例展示,强调了异常处理在提高程序健壮性方面的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

诸神缄默不语-个人优快云博文目录

在编程过程中,异常的出现是难以避免的。异常指程序在执行过程中发生的不正常情况,如除数为零、文件不存在等。如果不进行处理,程序就会崩溃退出。Python提供了try-except语句来捕获并处理异常,确保程序的健壮性。

try-except语句的语法

try:
    # 可能发生异常的代码块
    pass
except 异常类型1:
    # 发生异常类型1时执行的代码块
    pass
except 异常类型2:
    # 发生异常类型2时执行的代码块 
    pass
# 可以添加多个except语句用于捕获不同类型的异常
else:
    # 如果try代码块中没有发生异常,则执行else代码块
    pass
finally:
    # 无论try代码块是否发生异常,finally代码块都会执行
    pass

捕获一个特定异常

try:
    result = 10 / 0  # 发生除零异常
except ZeroDivisionError:
    print("除数不能为零!")

输出结果:

除数不能为零!

如果想要打印异常内容的话,可以通过 str(e)repr(e) 来捕获并打印异常的详细信息。str(e) 会给出异常的简单字符串表示,而 repr(e) 会提供更详细的信息,包括异常类型。

下面是一个示例,展示了如何捕获并打印 RuntimeError 的报错信息:

try:
    # 可能会引发 RuntimeError 的代码
    raise RuntimeError("这是一个运行时错误示例")
except RuntimeError as e:
    print("捕获到 RuntimeError 异常:")
    print("异常信息:", str(e))  # 简单的字符串表示
    print("异常详细信息:", repr(e))  # 详细的字符串表示,包括异常类型

在这个示例中,raise RuntimeError("这是一个运行时错误示例") 只是用来模拟一个 RuntimeError。实际应用中,你应该替换为可能引发此类异常的代码。

为了进一步处理异常信息,比如记录日志或执行其他操作,可以根据需要扩展 except 代码块。例如,使用 logging 模块来记录异常信息:

import logging

# 配置日志记录
logging.basicConfig(level=logging.ERROR, filename='error.log', 
                    format='%(asctime)s %(levelname)s:%(message)s')

try:
    # 可能会引发 RuntimeError 的代码
    raise RuntimeError("这是一个运行时错误示例")
except RuntimeError as e:
    logging.error("捕获到 RuntimeError 异常: %s", str(e))
    # 或者详细的字符串表示,包括异常类型
    logging.error("异常详细信息: %s", repr(e))

捕获多种异常

try:
    num = int(input("请输入一个数字: "))
    result = 10 / num
    print(f"结果是: {result}")
except (ValueError, ZeroDivisionError) as e:
    print(f"发生了异常: {e}")

输出示例:

请输入一个数字: 0
发生了异常: division by zero

捕获所有种类的异常

try:
    result = 10 / 0
except Exception as e:
    print(f"发生了异常: {e}")

输出结果:

发生了异常: division by zero

使用else和finally

try:
    num = int(input("请输入一个数字: "))
    result = 10 / num
except ValueError:
    print("输入的不是数字!")
except ZeroDivisionError:
    print("除数不能为零!")
else:
    print(f"结果是: {result}")
finally:
    print("无论如何,finally代码块都会执行。")

输出示例:

请输入一个数字: 5
结果是: 2.0
无论如何,finally代码块都会执行。

打印完整的报错信息

except Exception as e代码中,打印e只能显示完整报错信息的最后一点点内容,如果想要展示完整的报错信息,具体到哪个文件哪一行的命令出现了bug,就像不用try-except语句时会展示的完整的traceback一样,就用traceback库:

import traceback

try:
	...
except Exception as e:
	logging.error(traceback.format_exc())
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

诸神缄默不语

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

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

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

打赏作者

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

抵扣说明:

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

余额充值