2 回答

TA貢獻1816條經驗 獲得超4個贊
不要在with語句中這樣做,您的表達式將生成兩個不同的對象(列表或文件對象,列表沒有上下文管理器接口,文件對象有,這就是引發(fā)錯誤的原因)
只需分兩行,先打開:
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 中的上下文管理器正在發(fā)生一些瘋狂的事情。嘗試改用簡單的 for 語句和常規(guī)的 for 循環(huán)。
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__在你自己的類中實現(xiàn)該方法。有關更多詳細信息,請參閱此答案:Python 錯誤:AttributeError:__enter__
示例 test.txt
abcd
efgh
ijlk
輸出
(py36) [~]$ python3 read_option.py
ijlk
efgh
abcd
添加回答
舉報