在本书第四章关于Python的持久性之后,他们要求我们在“nester”中修改名为“print_lol”的模块的功能。
这是我的代码。
import sys
def print_lol(the_list, indent=False, level=0, fh=sys.stdout):
for each_item in the_list:
if isinstance(each_item, list):
print_lol(each_item, indent, level+1, fh)
else:
if indent:
for tab_stop in range(level):
print("\t", end='', file=fh)
else:
print(each_item, file=fh)
这是测试代码。
import nester3
pl = nester3.print_lol
cat = ['death', [3, 4, 5, ['life']]]
pl(cat, indent=True, fh='amazing.txt')
当我尝试实际调用此代码时会发生以下情况:
File "tester.py", line 7, in <module>
pl(cat, indent=True, fh='amazing.txt')
File "/home/ehl/Python/nester/nester3.py", line 39, in print_lol
print_lol(each_item, indent, level+1, fh)
File "/home/ehl/Python/nester/nester3.py", line 43, in print_lol
print("\t", end='', file=fh)
AttributeError:'str'对象没有属性'write'
我不明白我怎么可能添加“写”属性,任何帮助都会受到赞赏。
答案 0 :(得分:2)
应该是:
with open('amazing.txt', 'a') as f:
pl(cat, indent=True, fh=f)
您目前正试图致电print(..., file='amazing.txt')
,试图致电'amazing.txt'.write(...)
这当然没有意义。
'a'
以附加模式打开文件,您可以使用'w'
截断并以写入模式打开。