在编程过程中,异常的出现是难以避免的。异常指程序在执行过程中发生的不正常情况,如除数为零、文件不存在等。如果不进行处理,程序就会崩溃退出。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())