2 回答
TA贡献1816条经验 获得超4个赞
不要在with语句中这样做,您的表达式将生成两个不同的对象(列表或文件对象,列表没有上下文管理器接口,文件对象有,这就是引发错误的原因)
只需分两行,先打开:
def function(rev):
with open("test.txt") as fp:
data = reversed(list(fp)) if rev == True else fp:
for line in data:
print(line)
function(True)
TA贡献1805条经验 获得超9个赞
Python 中的上下文管理器正在发生一些疯狂的事情。尝试改用简单的 for 语句和常规的 for 循环。
read_option.py
def my_function(rev):
if rev == True:
read_pattern = reversed(list(open("test.txt").readlines()))
else:
read_pattern = list(open("test.txt"))
for line in read_pattern:
print (line)
my_function(True)
如果你真的想要一个with语句,你可能需要__enter__在你自己的类中实现该方法。有关更多详细信息,请参阅此答案:Python 错误:AttributeError:__enter__
示例 test.txt
abcd
efgh
ijlk
输出
(py36) [~]$ python3 read_option.py
ijlk
efgh
abcd
添加回答
举报