Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python,检查是否在';与';陈述_Python_With Statement - Fatal编程技术网

Python,检查是否在';与';陈述

Python,检查是否在';与';陈述,python,with-statement,Python,With Statement,我正在实现我的自定义open()函数(我们称之为myOpen())。任务是,我希望能够将此函数与with语句(with myOpen(…)作为myFile:)一起使用。据我所知,open()必须返回file对象(TextIO或BinaryIO)。但是open()在with语句的上下文中不是一个函数,而是一个类,它实现了\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。你有什么想法,如何把这

我正在实现我的自定义
open()
函数(我们称之为
myOpen()
)。任务是,我希望能够将此函数与
with
语句(
with myOpen(…)作为myFile:
)一起使用。据我所知,
open()
必须返回file对象(
TextIO
BinaryIO
)。但是
open()
with
语句的上下文中不是一个函数,而是一个类,它实现了
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。你有什么想法,如何把这两件事结合起来?

谢谢大家!

使用
with
语句仍然返回
\u io.x

>>类型(打开(“U文件”)
>>>将打开的(“U文件”作为o:打印(类型(o))
... 
with
语句只为代码块分配另一个变量。 例如:

defFive():
返回5
打印(五个())#->5
打印(键入(five())#->int
将five()作为x:
打印(x)#->5
打印(键入(x))#->int
打印(x)#->5
with
语句相当于

x=five()
打印(x)
打印(类型(x))
或者,对于
文件IO

handle=打开(“文件”)
#做事要谨慎

好吧,我知道哪里出了问题。一开始我认为,只能在类上调用
with
语句,该类具有这些神奇的方法(
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。因此:

使用类\u,该类\u将这些\u方法作为\u的返回值\u输入:
通过
但效果不同。带
之后的表达式也可以是函数,但它必须返回类的实例,该类实现了这些神奇的方法。我认为,这也是python的
open
工作方式。它是一个函数,返回文件对象(更准确地说是包装器):

>类型(打开)
>>>类型(打开('file','w'))
文件对象实现了这些神奇的方法:

>a=open('file','w')
>>>处长(a)
[…'uuu dir_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

所以为了解决我原来的问题,
myOpen()
必须是函数,它返回file对象,其中包含
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu,它有效地分配了
y=x()。\uuuuu enter\uuuu()
@Peter调用
,其中
x()
是函数,给了我
AttributeError:\uuu enter\uuuuuu
(Python3.9.5)啊,nvm,我重新阅读了这个问题,答案是不,你不能将上下文管理器和函数结合起来做这两件事。但是,您可以这样设计一个类:逻辑在
\uuuuu init\uuuuuu
中完成,只需要
def\uuuuu enter\uuuuuuu(self):返回self
。这样,无论是否使用
with
,您都会得到相同的结果。谢谢,好的,
with five()as x
会给我
属性错误:\uuuu enter\uuu
(python 3.9.5)。另一个问题是如何在
myOpen()
中处理
\uuu退出\uuu
?当
with
语句存在时,如何关闭
myOpen()
函数中的file descriprot?使用
\uuuuuuu enter\uuuu
\uuuu exit\uuuuu
方法为您的特殊文件句柄创建一个类。