您好,登录后才能下订单哦!
# Python中的异常相关知识点
## 1. 什么是异常?
在Python中,**异常(Exception)**是指程序执行过程中出现的意外情况,它会中断正常的程序流程。当Python遇到无法处理的错误时,会**抛出(raise)**一个异常对象。例如尝试打开不存在的文件、除以零、访问不存在的列表索引等。
```python
# 常见异常示例
print(10 / 0) # ZeroDivisionError
open("nonexistent.txt") # FileNotFoundError
通过try-except
块可以捕获并处理异常:
try:
result = 10 / 0
except ZeroDivisionError:
print("不能除以零!")
try:
# 可能抛出多种异常的代码
value = int("abc")
result = 10 / value
except (ValueError, ZeroDivisionError) as e:
print(f"发生错误: {type(e).__name__}: {e}")
else
:当没有异常发生时执行finally
:无论是否发生异常都会执行try:
num = int(input("输入数字: "))
except ValueError:
print("无效输入!")
else:
print(f"输入的数字是: {num}")
finally:
print("程序执行完毕")
Python内置了丰富的异常类,常见的有:
异常类型 | 描述 |
---|---|
SyntaxError |
语法错误 |
IndentationError |
缩进错误 |
NameError |
未声明/初始化变量 |
TypeError |
操作或函数应用于不适当类型 |
IndexError |
序列中没有此索引 |
KeyError |
映射中没有这个键 |
AttributeError |
对象没有这个属性 |
ImportError |
导入模块/对象失败 |
ModuleNotFoundError |
模块未找到 |
使用raise
语句可以主动抛出异常:
def validate_age(age):
if age < 0:
raise ValueError("年龄不能为负数")
return age
try:
validate_age(-5)
except ValueError as e:
print(e)
通过继承Exception
类可以创建自定义异常:
class MyCustomError(Exception):
"""自定义异常类"""
def __init__(self, message):
self.message = message
super().__init__(self.message)
try:
raise MyCustomError("这是自定义错误")
except MyCustomError as e:
print(e)
Python 3引入了异常链机制,可以使用raise...from
语法:
try:
open("nonexistent.txt")
except FileNotFoundError as e:
raise RuntimeError("文件操作失败") from e
上下文管理器(with
语句)可以优雅地处理资源释放:
try:
with open("data.txt") as f:
content = f.read()
except FileNotFoundError:
print("文件未找到")
避免空的except块:这会隐藏所有错误
# 不推荐
try:
do_something()
except:
pass
捕获特定异常:而不是使用宽泛的Exception
记录异常信息:使用logging
模块记录完整错误
保持try块精简:只包含可能抛出异常的代码
合理使用finally:确保资源被正确释放
使用traceback
模块获取完整调用栈:
import traceback
try:
risky_operation()
except Exception:
traceback.print_exc()
使用sys.exc_info()
获取异常信息三元组
异常处理虽然方便,但在性能敏感的场景中应注意:
良好的异常处理是编写健壮Python程序的关键。通过合理使用try-except结构、自定义异常和上下文管理器,可以使代码更具容错性和可维护性。记住:异常应该用于处理”异常”情况,而不是控制常规程序流程。
提示:Python官方文档的异常层次结构是深入学习的好资源。 “`
(全文约1150字)
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。