大模型学习-python基础Day8
一.错误和异常
两种错误:语法错误和异常
语法错误
if x == 1 # 缺少冒号
print(x)
异常举例:
"1" + 2 # 字符串与整数无法相加
1.异常处理
try except用来捕抓异常
try:
# 可能会引发异常的代码
risky_operation()
except:
# 异常处理代码
handle_exception()
try:
x = 1 / 0
except:
print("不能除以零")
print("执行完毕")
try except执行完后,依然会继续执行程序
try :
可能发生的异常
except 异常类型1 as 别名1:
异常处理语句1
except (异常类型2,异常类型3) as 别名2:
异常处理语句2
except:
捕获处理所有类型异常
如果没有发生异常,程序会忽略except中的代码,继续向下执行
如果发生了异常,会忽略try中剩余代码,根据异常类型匹配到相应的except并执行其中的代码
如果发生异常,且异常类型无法和任何except匹配,异常将向外传递
一个except可以同时处理多个异常,把这些异常放在一个元组里面
异常处理结构:try-except-else
Python中的try-except-else结构用于捕获和处理代码执行过程中可能出现的异常,同时允许在无异常时执行特定代码块。
你希望在try块中有些操作执行成功后,在执行其他代码,那就可以把代码放到else语句块中。
try:
# 尝试执行的代码
risky_operation()
except ExceptionType:
# 发生指定异常时的处理
handle_exception()
else:
# 无异常时执行的代码
proceed_successfully()
ry-except-else-finally 结构详解
try-except-else-finally 是 Python 中用于异常处理的完整结构,每个部分有特定用途。
finally 块
- 无论是否发生异常都会执行。
- 常用于清理资源(如关闭文件、释放锁)。
def divide(a, b):
try:
result = a / b
except ZeroDivisionError:
print("Error: Division by zero")
else:
print("Result is", result)
finally:
print("Execution complete")
divide(10, 2) # 输出结果和完成信息
divide(10, 0) # 输出错误和完成信息

2.抛出异常
raise用来抛出异常
语法:
raise 异常类型("异常描述")
if x < 0:
raise ValueError("x cannot be negative")
同try-except一起用
def validate_age(age):
if age < 0:
raise ValueError("年龄不能为负")
try:
validate_age(-5)
except ValueError as e:
print(f"捕获到错误: {e}")
#结果:捕获到错误: 年龄不能为负
assert断言机制
用于判断一个表达式,在表达式条件为false的时候触发异常,常常用于调试程序。
assert condition, "Error message"
condition:需要验证的布尔表达式Error message:可选参数,断言失败时显示的错误信息
等价于
if not 表达式
raise AssertionError([异常描述])
assert 的工作原理
- 程序执行到 assert 语句时,会先计算条件表达式
- 如果条件为 True,程序继续正常执行
- 如果条件为 False,抛出 AssertionError 并终止程序
def divide(a, b):
assert b != 0, "Division by zero"
return a / b
3.自定义异常
通过直接或者间接继承Exception类来创建自己的异常。
自定义异常类通常继承自 Exception 类。可以添加额外的属性和方法来提供更多错误信息。
class ValidationError(Exception):
"""带有额外属性的自定义异常"""
def __init__(self, message, errors):
super().__init__(message)
self.errors = errors
def validate_data(data):
errors = []
if not data.get('name'):
errors.append("缺少名称字段")
if errors:
raise ValidationError("数据验证失败", errors)
try:
validate_data({})
except ValidationError as e:
print(f"错误信息: {e}")
print(f"详细错误: {e.errors}")
4.异常的传递
异常传递的基本规则
- 当函数内部发生异常且未被捕获时,异常会传递给调用该函数的地方。
- 如果调用处也未捕获,异常继续向上传递,直到被
try-except块捕获。 - 若始终未被捕获,程序终止并打印异常信息。
当存在try嵌套或者函数嵌套时,若内层出现了异常且在内层无法处理,会将异常一层一层向外传递,直到异常被处理或程序报错
def func1():
raise ValueError("异常在 func1 中抛出")
def func2():
func1()
def func3():
try:
func2()
except ValueError as e:
print(f"捕获到异常: {e}")
func3()
捕获到异常: 异常在 func1 中抛出
5.with关键字
python中with语句用于异常处理。封装了try except finally编码范式,提供了一种简洁方式来确保资源的正确获取和释放,同时处理可能发生的异常,提高了易用性。
语法
with expression as variable:
# 代码块
expression返回一个上下文管理器对象,即实现了__enter__和__exit__方法。
variable将__enter__方法的返回值赋给变量(可选)。

try:
with open("text.txt","wt") as file:
file.write(str1)
finally:
print("文件是否关闭:",file.closed) #文件会关闭,关闭操作是with帮忙做的
6.常用异常
Python 常见异常类型总结
以下表格整理了 Python 中常见的异常类型及其触发场景:
| 异常类型 | 触发场景 |
|---|---|
SyntaxError |
语法错误,代码不符合 Python 语法规则 |
IndentationError |
缩进错误,属于 SyntaxError 的子类 |
NameError |
尝试访问未定义的变量或函数 |
TypeError |
操作或函数应用于不适当类型的对象 |
ValueError |
传入的参数类型正确但值不合法 |
IndexError |
序列索引超出范围 |
KeyError |
字典中访问不存在的键 |
AttributeError |
尝试访问对象不存在的属性 |
ImportError |
导入模块或模块中的内容失败 |
ModuleNotFoundError |
导入的模块不存在(Python 3.6+) |
ZeroDivisionError |
除数为零 |
FileNotFoundError |
尝试打开不存在的文件 |
PermissionError |
没有足够的权限访问文件或资源 |
KeyboardInterrupt |
用户按下中断键(通常是 Ctrl+C) |
MemoryError |
内存不足 |
OverflowError |
数值运算结果超出表示范围 |
RecursionError |
递归深度超过最大限制 |
StopIteration |
迭代器没有更多的值 |
AssertionError |
assert 语句失败 |
NotImplementedError |
抽象方法未实现 |
RuntimeError |
一般运行时错误,通常作为其他运行时异常的基类 |
OSError |
操作系统相关的错误,如文件操作失败 |
UnicodeError |
Unicode 编码/解码错误 |
TimeoutError |
操作超时 |
EOFError |
读取文件时到达文件末尾 |
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)