异常机制
1. 常见异常类型
Python 内置了许多异常类型,以下是一些常见的异常:
SyntaxError: 语法错误,代码不符合 Python 语法规则。IndentationError: 缩进错误,通常是由于缩进不一致引起的。NameError: 尝试访问未定义的变量或函数。TypeError: 操作或函数应用于不适当类型的对象。ValueError: 函数接收到正确类型但值不合适的参数。IndexError: 尝试访问序列中不存在的索引。KeyError: 尝试访问字典中不存在的键。FileNotFoundError: 尝试打开不存在的文件。ZeroDivisionError: 除数为零的错误。AttributeError: 尝试访问对象不存在的属性。
2. 异常处理
Python 使用 try、except、else 和 finally 语句来处理异常。
基本语法
try:
# 可能引发异常的代码
except xxError1:
# 处理特定异常
except xxError2:
# 处理特定异常
except Exception as e: # 这是最大的异常
# 兜底的异常
print(e) # 输出异常,不会有类型,只有描述
else:
# 如果没有异常发生,执行此块
finally:
# 无论是否发生异常,都会执行此块
示例
try:
num = int(input("请输入一个数字: "))
result = 10 / num
print(f"结果: {result}")
except ValueError:
print("不是数字")
except ZeroDivisionError:
print("不能输入0")
except Exception as e:
print("未知的异常")
print(e)
else:
print("计算正常结束")
finally:
print("程序完成")
3. 抛出异常
使用 raise 语句可以主动抛出异常
def check_age(age):
if age < 0:
raise ValueError("不能是负数")
elif age < 18:
print("未成年")
else:
print("已成年")
check_age(-5) # 报错
4. 自定义异常
通过继承 Exception 类来创建自定义异常。
class CustomError(Exception):
def __init__(self, message):
self.message = message
super().__init__(self.message)
try:
raise CustomError("This is a custom error!")
except CustomError as e:
print(f"Caught an exception: {e}")
5. traceback 库
如果使用 try except 捕获了异常,在打印异常时只能输出描述,而不是完整的堆栈信息,这时可以使用 traceback 库中的方法
try:
1 / 0
except Exception as e:
print(e) # 输出 division by zero
如果使用 traceback
import traceback
try:
1 / 0
except Exception:
traceback.print_exc() # 会输出详细信息
try:
1 / 0
except Exception:
error_message = traceback.format_exc() # 格式化堆栈信息为字符串,比如需要把错误信息记录日志就需要写入文本数据
print("Error details:\n", error_message) # 输出以字符串表述的异常信息
# 还有一些别的方法就不列举了
5. 总结
try: 包含可能引发异常的代码。except: 捕获并处理异常。else: 当没有异常发生时执行。finally: 无论是否发生异常都会执行。raise: 主动抛出异常。- 自定义异常: 通过继承
Exception类创建。

浙公网安备 33010602011771号