Ошибка печати (end = '') в Python 3.2 - PullRequest
2 голосов
/ 11 февраля 2012

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

#!/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=' '. Если я опущу его, между каждой строкой стиха будет напечатана пустая строка.

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

Ответы [ 2 ]

11 голосов
/ 11 февраля 2012

Ваш файл содержит правильную строку "shebang" для 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

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

7 голосов
/ 11 февраля 2012

У вас не установлен 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 предлагает:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...