python异常
一. 异常
异常是python解释器检测到程序的错误时,停止执行并给出错误信息
f = open("t.txt", "r") print("后面代码执行,程序正常终止") ''' Traceback (most recent call last): File C:\\Users\\11265\Desktop\\code\\venv\\class\\__init__.py, line 1, in <module> f = open("t.txt", "r") FileNotFoundError: [Errno 2] No such file or directory: "t.txt" '''
说明:只读模式打开一个不存在的文件,抛出异常,程序停止
二. 捕获异常和处理:
1. 在程序可能抛异常的地方使用try...except...捕获并处理异常
语法:
try: 可能发生错误的代码 except: 如果出现异常执行的代码
示例:
try: f = open("t.txt", "r") except: print("处理异常") print("后面代码执行,程序正常终止") ''' 处理异常 后面代码执行,程序正常终止 '''
说明:这里捕获的是所有异常
2. 捕获指定异常
可以在except 关键字后面添加异常类名,捕获指定异常
语法:
try: 可能发生错误的代码 except 异常类型: 如果捕获到该异常类型执行的代码
示例:
try: f = open("t.txt", "r") except FileNotFoundError: print("处理异常") print("后面代码执行,程序正常终止") ''' 处理异常 后面代码执行,程序正常终止 '''
说明:如果try后面语句块没有抛出FileNotFoundError,而是抛出其他异常,则异常不会被捕获
3. 捕获多个指定异常
except后面使用小括号,并用逗号隔开多个异常(实际为元组)
语法:
try: 可能发生错误的代码 except (异常1, 异常2...): 如果捕获到该异常类型执行的代码
示例:
try: f = open("t.txt", "r") except (FileNotFoundError, NameError): print("处理异常") print("后面代码执行,程序正常终止") ''' 处理异常 后面代码执行,程序正常终止 '''
4. 可以使用as关键字获取到捕获的异常对象并命名
语法:
try: 可能发生错误的代码 except (异常1, 异常2...) as 异常对象名: 如果捕获到该异常类型执行的代码
示例:
try: f = open("t.txt", "r") except (FileNotFoundError, NameError) as e: print(type(e)) # <class 'FileNotFoundError'> print("处理异常", e) # 处理异常 [Errno 2] No such file or directory: 't.txt'
5. Exception类捕获所有异常
try: f = open("t.txt", "r") except Exception as e: print(type(e)) # <class 'FileNotFoundError'> print("处理异常", e) # 处理异常 [Errno 2] No such file or directory: 't.txt'
说明:捕获的还是FileNotFoundError, 这是多态的一种表现
6. else
try语句块中如果没有出现异常,会执行else语句块,否则不执行
try: f = open("t.txt", "r") except Exception as e: print(type(e)) # <class 'FileNotFoundError'> print("处理异常", e) # 处理异常 [Errno 2] No such file or directory: 't.txt' else: print("try语句块中没有异常时执行的代码") # 未执行
7. finally:无论是否有异常,均会执行的代码
try: f = open("t.txt", "r") except NameError as e: print(type(e)) # <class 'FileNotFoundError'> print("处理异常", e) # 处理异常 [Errno 2] No such file or directory: 't.txt' else: print("try语句块中没有异常时执行的代码") # 未执行 finally: print("无论无何都会执行的代码")
说明:finally代码块无论如何都会执行,即使except 未捕获到抛出的异常也会执行
8. 异常传递
内存未处理的异常抛出后,在外层可以捕获到
9. 程序中主动抛出异常:
语法:
raise 异常类名(参数)
说明raise后面的语句其实就是创建了一个异常类对象
示例:
try: raise NameError() f = open("t.txt", "r") except NameError as e: print(type(e)) # <class 'NameError'> print("处理异常", e) # 处理异常
说明:try语句块中一旦抛出异常,这个语句块中后面的代码不再执行,直接执行except语句
10. 自定义异常
创建一个类并继承Exception,即创建了一个自定义异常类
class MyError(Exception): def __init__(self): self.name = '自定义异常' def __str__(self): return self.name try: raise MyError() except MyError as e: print(type(e)) # <class '__main__.MyError'> print("处理异常", e) # 处理异常 自定义异常
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
2018-12-27 springboot中@ConfigurationProperties注解和@EnableConfigurationProperties配合使用获取配置文件属性,封装到bean
2018-12-27 springboot过滤器配置