У вас есть странное определение «работа»:
>>> eval("for i in range(5):\n print 'hello'")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 1
for i in range(5):
^
SyntaxError: invalid syntax
>>>
Я не уверен, почему вы используете eval
- Я подозреваю, что вы имеете в виду exec
. Выражения и операторы - это абсолютно разные сущности в Python - eval
имеет дело только с выражениями (голое выражение - это , также является оператором, поэтому exec
может работать с ним так же, как с другими операторами).
Обращаясь к exec
и размышляя над ситуацией как основного коммиттера Python, я думаю, что это незначительное заблуждение: точно так же, как (избыточные и бесполезные) пробелы, табуляции и фиды форм непосредственно перед тем, как NEWLINE принимаются и игнорируются, так должно быть (так же, как избыточно и бесполезно) возврат каретки. Я прошу прощения: я думаю, что мы никогда не думали, что кто-то может хочет поставить туда возврат каретки - но тогда нет смысла, например, иметь. там есть каналы, и мы принимаем , что ... поэтому я не вижу смысла отклонять возврат каретки (или другие пробелы, не являющиеся ANSI Unicode, теперь, когда в Python 3 мы принимаем произвольный Unicode не ANSI буквенно-цифровые символы в идентификаторах).
Если вам интересно, пожалуйста, откройте проблему на трекере проблем Python и (за исключением непредвиденного противодействия со стороны других коммиттеров) я думаю, что я могу исправить ее с помощью Python 3.2 (который должен выйти через 12-18 месяцев - это оценка [обоснованное предположение], а не обещание; -).