在编程过程中,异常的出现是难以避免的。异常指程序在执行过程中发生的不正常情况,如除数为零、文件不存在等。如果不进行处理,程序就会崩溃退出。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
如果没有报错,会进入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代码块都会执行。
打印完整的报错信息:traceback库
在except Exception as e代码中,打印e只能显示完整报错信息的最后一点点内容,如果想要展示完整的报错信息,具体到哪个文件哪一行的命令出现了bug,就像不用try-except语句时会展示的完整的traceback一样,就用traceback库:
import traceback
try:
...
except Exception as e:
logging.error(traceback.format_exc()) # 写入日志
# 如果只需要在终端上打印就写 traceback.print_exc()
本文详细介绍了Python中的try-except语句及其用法,包括捕获单个、多个异常以及使用else和finally代码块。通过实例展示,强调了异常处理在提高程序健壮性方面的重要性。
3100

被折叠的 条评论
为什么被折叠?



