在控制台中以交互方式在`with`块内逐行执行代码

h79rfbju  于 2021-09-08  发布在  Java
关注(0)|答案(1)|浏览(237)

在控制台中进行交互测试时,有时我使用 with 声明。但是,由于它们增加缩进,提示将从 >>>... 直到我返回到最低缩进,执行才会停止。这对于函数定义是有意义的,因为代码实际上不是在函数定义中执行的。但是还有循环(第一次迭代可以在循环被完全描述之前执行)、条件语句、, try , with ...
有没有办法实现这种执行?或者我必须手动操作上下文管理器的界面,如下所示:

>>> cm = open("E:/test.txt")
>>> f = cm.__enter__()
>>> f.read()
'contents of the file'
>>> cm.__exit__()
euoag5mw

euoag5mw1#

对于控制台来说,在一个内存中一行一行地执行是没有意义的 with 陈述许多上下文管理器会注意抑制在上下文中发生的某些类型的异常 with 块,以及许多其他程序在引发某些类型的异常之前会小心地执行某种清理操作。 open 这是一个很好的例子——如果python读取文件时出现某种异常,请使用 open 因为上下文管理器将确保在python引发异常之前再次关闭文件。
此代码:

with open("E:/test.txt", "r") as f:
    var = f.read()

与此代码实现的功能相同:

try:
    f = open("E:/test.txt", "r")
    var = f.read()
finally:
    f.close()

如果您在交互式控制台中执行代码,那么最好使用“老式”的上下文管理器前方式打开和读取文件,但不进行异常处理。
交互式控制台之外的良好python实践:

with open("E:/test.txt", "r") as f:
    var = f.read()                  # file is automatically closed as the `with` block ends

在交互控制台中逐行执行代码的“老式”解决方案(在实际脚本中很危险——没有异常处理!):

f = open("E:/test.txt", "r")
var = f.read()
f.close()                           # Remember to manually close the file, since we're not using a `with` statement!

相关问题