【问题标题】:Nester.py: AttributeError: 'str' object has no value 'write'Nester.py:AttributeError:“str”对象没有值“write”
【发布时间】:2013-05-25 05:18:52
【问题描述】:

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

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

【问题讨论】:

  • 你为什么要添加所有这些标签?你认为这里有什么特定于 linux 的东西吗?列表或模块有什么相关的吗?
  • 你是对的。我删除了它。

标签: python list module attributeerror


【解决方案1】:

应该是:

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

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

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

【讨论】:

  • 你应该在这里使用'w'模式。
  • … 或 ar+,如果您不想截断和覆盖任何现有文件。
猜你喜欢
  • 2019-03-25
  • 2017-07-06
  • 2022-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-13
相关资源
最近更新 更多