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)    # 处理异常 自定义异常
复制代码

 

posted @   foreast  阅读(75)  评论(0编辑  收藏  举报
编辑推荐:
· 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过滤器配置
点击右上角即可分享
微信分享提示