Найти - Пользователи
Полная версия: SyntaxError в Python 3.2 или баг?
Начало » Python для новичков » SyntaxError в Python 3.2 или баг?
1
LShadow77
Всем здравствуйте. Ещё раз. Вчера задал этот вопрос, но моя тема куда-то делась :(

Написал модуль cnc.py для быстрой генерации УП для станков с ЧПУ. Одной из ключевых там является функция GPrint(), которая выводит команду в выходной файл (если _OutputMode==_OUT_TO_FILE), файл, создаваемый по умолчанию (если _OutputMode==_OUT_TO_UNK), или добавляет строку в заданный список (если _OutputMode==_OUT_TO_LIST). Хендл файла или список содержится в глобальной внутренней переменной модуля _Output:
_OUT_TO_UNK = -1
_OUT_TO_FILE = 0
_OUT_TO_LIST = 2

_Output=_Self=None #задаётся другой процедурой или с помощью _SetSelfOutput()
_OutputMode=_OUT_TO_UNK
…………………………………………………..
def GPrint(Line):
global _Output,_OutputMode
if _OutputMode==_OUT_TO_FILE:
print(Line,file=_Output)
elif _OutputMode==_OUT_TO_LIST: _Output.append(Line)
else:
_SetSelfOutput()
print(Line,file=_Output)
В Python 3.1.3 прекрасно всё получилось, скрипты исполнялись без проблем, но когда установил Python 3.2, тот выдал:
E:\WORK\G_CODE\GCodeGen>python test.py
Traceback (most recent call last):
File "test.py", line 1, in <module>
from cnc import *
File "E:\WORK\G_CODE\GCodeGen\cnc.py
print(Line,file=_Output)
^
SyntaxError: invalid syntax
Какая такая SyntaxError?
Но самое странное произошло тогда, когда я запустил тот же скрипт с перенаправлением вывода:
E:\WORK\G_CODE\GCodeGen>python test.py >report.txt
Скрипт выполнился без ошибок! При этом была создана папка __pycache__ с файлом cnc.cpython-32.pyc внутри, а файл report.txt оказался пустым.

Объясните мне кто-нибудь пожалуйста, что происходит?.
Андрей Светлов
по фотографии не лечим
LShadow77
А я никакой фотографии и не предоставлял, если что-то не ясно в моём вопросе, объясните что именно.
LShadow77
Я локализовал ошибку, он ругается на file=handle в функции print():
import sys
Line="QWERTY"
print(Line,file=sys.stdout)
Результат:
D:\KDV\Work\GCodeGen>python _.py
File "_.py", line 3
print(Line,file=sys.stdout)
^
SyntaxError: invalid syntax
Так что, получается, параметр file в print() отменили?! Или это всё же bag в новой версии?
Андрей Светлов
Нет, не отменили. Даже если бы отменили — это не давало бы SyntaxError.
Скорее всего вы запускаете python 2.X. Каким образом — вам виднее.
LShadow77
Установил опять Питон 3.1.3, но там оказалась таже проблема. Но я разобрался, как это происходит.
Если просто запустить скрипт с командной строки, или через полное имя программы python.exe, то он нормально выполнится:

>test.py
>C:\Python31\python.exe test.py

Если запустить скрипт так:
python.exe test.py
то вылезит SyntaxError на print(…, file=…).
Т.е, это есть БАГ и никак иначе! Остаётся только задуматься, так ли уж безупречен код питона… :/
Александр Кошелев
Сделайте
$  python.exe -V
Lexander
… и он напечатает что-то типа “Python 2.6.1” :)
LShadow77
Вот же ж %%%%%%%! Оказывается в системе уже стоял Python 2.6.2, который остался в PATH после установки последней версии (я умолчал про то, что компьютер-то не мой). Насчёт бага погорячился, беру слова обратно. И крыша у меня на месте (ву-у-хх!)
Александр Кошелев, Lexander, большое Вам спасибо!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB