0

在本书第四章关于 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”

我不明白我怎么可能添加“写”属性,任何帮助将不胜感激。

4

1 回答 1

2

应该:

with open('amazing.txt', 'a') as f:
    pl(cat, indent=True, fh=f)

您当前正在尝试调用print(..., file='amazing.txt')which 尝试调用'amazing.txt'.write(...)which 当然没有意义。

'a'以追加模式打开文件,您可以'w'用来截断并以写入模式打开。

于 2013-05-29T19:42:18.740 回答