あなたは「仕事」の奇妙な定義を持っています:
>>> 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 の直前の (冗長で役に立たない) スペース、タブ、およびフォーム フィードは受け入れられ、無視されるのと同じように、(冗長であるのと同じように)無駄です)キャリッジリターンになります。申し訳ありませんが、誰かがキャリッジ リターンをそこに置きたいと考えたことは一度もありませんでした。改行を拒否する理由 (または、他の Unicode 非 ANSI 空白、Python 3 では識別子に任意の Unicode 非 ANSI 英数字を受け入れるようになった)。
気にするなら、Python の問題トラッカーで問題を開いてください。(他のコミッターによる予期せぬ反対がなければ) Python 3.2 で修正できると思います (これは 12 ~ 18 か月でリリースされるはずです。これは推定です [情報に基づいた推測です)。 ]、約束ではありません;-)。