2012-02-11 2 views
2

Я начинаю любительский программист, начинающий учиться Python 3 (3.2), используя Geany на Linux. Я пытался переработать следующий пример в Swaroop C H's Python 3 tutorial Мой код выглядит следующим образом:Ошибка Python 3.2 print (end = '')

#!/usr/bin/env python3 
# Filename: poem.py 

poem = '''\ 
Programming is fun 
When the work is done 
if you wanna make your work also fun: 
    use Python! 
''' 

with open('poem.txt', mode = 'w') as pfile: 
    pfile.write(poem) 

with open('poem.txt', mode = 'r') as pfile: 
    while True: 
     line = pfile.readline() 
     if len(line) == 0: 
      break 
     print(line, end='') 

Я не могу скомпилировать программу. Я получаю следующее сообщение об ошибке, которое я не понимаю:

SyntaxError: ('invalid syntax', ('poem.py', 19, 24, "  print(line, end='')\n")) 

Я получаю ту же ошибку при запуске его кода без изменений. Он отлично работает после удаления end=' '. Если я опускаю, пустая строка печатается между каждой строкой стихотворения.

Буду благодарен за любую помощь/объяснение.

+4

Вы уверены, что используете Python 3? Вы пытались запустить его как 'python3 poem.py'? –

+9

Кстати, автор этого учебника, кажется, новичок (а также страшный поэт: p). Пути Pythonic для итерации по строкам файла - 'for line in pfile'. –

ответ

7

У вас нет Python 3.x, который установлен или не используется. Это работает отлично для меня в Python 3.x, но я получаю ошибку, которую вы имеете под Python 2.x. Shebangs не являются гарантией, они должны быть удостоены того, что вы используете для запуска скрипта, и если вы запустите интерпретатор напрямую, они будут проигнорированы. Поэтому попробуйте убедиться, что вы используете Python3. В зависимости от вашей среды это может быть сделано по-разному, но в Unix, попробуйте python3 вместо python (хотя некоторые дистрибутивы, такие как Arch Linux, отображают python на Python 3.x и python2 на Python 2.x).

На другой ноте, все файлы итерируемыми в Python, так что вы гораздо лучше делать:

with open('poem.txt', mode='r') as pfile: 
    for line in pfile: 
     print(line, end='') 

Также отметим PEP8 предлагает:

Не используйте пробелы вокруг " = ', когда используется для указания аргумента ключевого слова или значения параметра по умолчанию.

Как и в вашем режиме аргументы.

+0

Почему не просто делать: 'for line in open ('poem.txt'): print (line, end = '')' – ccpizza

+2

@ccpizza: инструкция '' with'' обрабатывает файл правильно, поэтому он более устойчив, чем ваш пример. –

+0

Спасибо, что были правы. Я использовал Geany для использования Python 2. Изменены настройки, и все в порядке. Я буду помнить, что вы сказали о коде. Я еще не определился, как принять ответ, но сделаю это, как только у меня получится. – Disnami

11

Ваш файл содержит правильную «притон» линию для Python 3:

#!/usr/bin/env python3 

Однако, для того, чтобы этот притон линия вступила в силу, необходимо запустить скрипт непосредственно как:

./poem.py 

(Возможно, вам понадобится сделать chmod +x poem.py).

Если вы решите явно запустить интерпретатор Python:

python poem.py 

то python, который получает работать будет первым один в вашем PATH (типа python --version, чтобы увидеть, который один, что есть). Вы все равно можете запустить Python 3 с помощью:

python3 poem.py 

который должен работать на вас.

+0

+1 Это более ясный ответ, чем мой, для основной проблемы, но я оставлю свои комментарии, не связанные с темой о коде. –

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