Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 6, 2011 12:44:43

LShadow77
От:
Зарегистрирован: 2011-01-11
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

SyntaxError в Python 3.2 или баг?

Всем здравствуйте. Ещё раз. Вчера задал этот вопрос, но моя тема куда-то делась :(

Написал модуль 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 оказался пустым.

Объясните мне кто-нибудь пожалуйста, что происходит?.



Офлайн

#2 Апрель 6, 2011 13:23:00

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

SyntaxError в Python 3.2 или баг?

по фотографии не лечим



Офлайн

#3 Апрель 6, 2011 15:10:40

LShadow77
От:
Зарегистрирован: 2011-01-11
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

SyntaxError в Python 3.2 или баг?

А я никакой фотографии и не предоставлял, если что-то не ясно в моём вопросе, объясните что именно.



Офлайн

#4 Апрель 6, 2011 17:32:27

LShadow77
От:
Зарегистрирован: 2011-01-11
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

SyntaxError в Python 3.2 или баг?

Я локализовал ошибку, он ругается на 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 в новой версии?



Офлайн

#5 Апрель 6, 2011 17:50:55

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

SyntaxError в Python 3.2 или баг?

Нет, не отменили. Даже если бы отменили — это не давало бы SyntaxError.
Скорее всего вы запускаете python 2.X. Каким образом — вам виднее.



Офлайн

#6 Апрель 7, 2011 17:14:44

LShadow77
От:
Зарегистрирован: 2011-01-11
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

SyntaxError в Python 3.2 или баг?

Установил опять Питон 3.1.3, но там оказалась таже проблема. Но я разобрался, как это происходит.
Если просто запустить скрипт с командной строки, или через полное имя программы python.exe, то он нормально выполнится:

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

Если запустить скрипт так:
python.exe test.py
то вылезит SyntaxError на print(…, file=…).
Т.е, это есть БАГ и никак иначе! Остаётся только задуматься, так ли уж безупречен код питона… :/



Офлайн

#7 Апрель 7, 2011 17:17:12

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

SyntaxError в Python 3.2 или баг?

Сделайте

$  python.exe -V



Офлайн

#8 Апрель 8, 2011 00:06:28

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

SyntaxError в Python 3.2 или баг?

… и он напечатает что-то типа “Python 2.6.1” :)



Офлайн

#9 Апрель 8, 2011 14:41:36

LShadow77
От:
Зарегистрирован: 2011-01-11
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

SyntaxError в Python 3.2 или баг?

Вот же ж %%%%%%%! Оказывается в системе уже стоял Python 2.6.2, который остался в PATH после установки последней версии (я умолчал про то, что компьютер-то не мой). Насчёт бага погорячился, беру слова обратно. И крыша у меня на месте (ву-у-хх!)
Александр Кошелев, Lexander, большое Вам спасибо!



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version