2013-05-29 1 views
0

Следуя четвертой главе книги о сохранении на Python, они просят нас внести изменения в функцию модуля print_lol внутри «nester».Nester.py: AttributeError: объект 'str' не имеет значения 'write'

Вот мой код.

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: «ул» объект не имеет атрибута «писать»

Я не понимаю, как Я мог бы добавить атрибут «написать», любая помощь будет оценена по достоинству.

+0

Почему вы добавили эти теги? Вы думаете, что здесь есть что-то конкретное? Есть ли что-нибудь о списках или модулях, которые каким-либо образом актуальны? – abarnert

+0

Вы правы. Я удалил его. – user2247977

ответ

2

Должно быть:

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

Вы в настоящее время пытаются вызвать print(..., file='amazing.txt'), который пытается вызвать 'amazing.txt'.write(...), которые, конечно, не имеет смысла.

'a' открывает файл в режиме добавления, вы можете использовать 'w' для усечения и открытия в режиме записи.

+1

вы должны использовать режим ''w'' здесь. –

+0

... или 'a' или' r + ', если вы не хотите усекать и перезаписывать любой существующий файл. – abarnert

Смежные вопросы