Python with关键字详解:上下文管理器与异常处理的最佳实践
目录

在Python中,with是一个用于处理上下文管理器的关键字。上下文管理器是一个定义进入和离开上下文时应执行的操作的对象。 with语句使代码更加清晰易读,并且简化了文件流等公共资源的管理。
1.有关键字
Python中的with语句用于异常处理,封装了try... except...finally编码范式,提高易用性。
新手教程的例子很形象:
Python 与关键字 |新手教程(runoob.com)
2.上下文管理器
这部分参考:【Python】withkeyword_python和keyword_InceptionZ的博客详解-CSDN博客
以文件操作为例,打开文件相当于上面,操作文件相当于下面,关闭文件相当于下面。
上下文管理器:上下文管理器的本质是一个可以支持with操作的类或对象。任何一对实现 __enter__() 和 __exit__() 方法的类对象都可以称为上下文管理器。上下文管理器对象可以使用with关键字来管理上下文。显然,文件(文件对象)也实现了上下文管理协议(上面的两个方法)
自定义上下文管理器:
class MyFile():
# 1. __init__() 初始化方法
def __init__(self,file_name,file_mode):
self.file_name = file_name
self.file_mode = file_mode
# 2. __enter__() 上文方法
def __enter__(self):
print("进入上文")
self.file = open(self.file_name,self.file_mode)
return self.file
# 3. __exit__() 下文方法
def __exit__():
print("进入下文")
self.file.close()
# hello.txt为自己定义的文件
# file 并不是MyFile的一个对象,而是上文__enter__函数返回的内容,是一种资源
with MyFile('hello.txt','r') as file:
file_data = file.read()
print(file_data)
# result
进入上文
这里是你文件里的内容
进入下文
三、总结
with语句的实现原理是基于上下文管理器的。上下文管理器是一个实现 __enter__ 和 __exit__ 方法的类。使用 with 语句确保在嵌套块的末尾调用 __exit__ 方法。这个概念类似于 try...finally 块的使用。
总结一下with的工作原理:
(1)紧跟在with后面的语句被求值后,调用返回对象的“-enter-()”方法,该方法的返回值将赋给as后面的变量;
(2) 执行完with后面的所有代码块后,会调用之前返回的对象的“-exit-()”方法。
如果你觉得上面的总结比较抽象,可以通过看下面的例子来理解:
4.与torch.no_grad()一起使用
只需按以下顺序阅读:
(1条留言)【pytorch系列】with torch.no_grad():使用详解_大黑山禅师博客-CSDN博客
(6条消息) 什么时候应该与torch.no_grad()一起使用?什么时候应该使用.requires_grad ==False?_no_grad grad_zero_Y。张F的博客-CSDN博客 最后看一下这个:
pytorch autograd后向函数中retain_graph参数的作用,简单例子分析,以及create_graph参数的作用 - yangyuwen_yang - 博客园(cnblogs.com)