Frage

Warum eval-Funktion funktioniert nicht mit \ r \ n, aber mit \ n. zum Beispiel eval ( "für i im Bereich (5): \ r \ n-Druck 'Hallo'") nicht funktioniert eval ( "for i in range (5): \ n print 'Hallo'") arbeitet

Ich weiß, dass es kein Problem Ursache ist replace ( "\ r", "") korrigiert, aber jemand weiß, warum passiert?

- Edit-- Oh! sorry, genau, ich meinte exec. Zeilenumbrüche erschienen, weil ich von einem HTML-Textfeld über POST bin Lesung (Ich bin auf einer Linux-Box). Es ist jetzt klarer, vielen Dank an alle.

War es hilfreich?

Lösung

Sie haben eine seltsame Definition des Begriffs "Arbeit":

>>> 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
>>> 

Ich bin mir nicht sicher, warum Sie eval verwenden - ich vermute, Sie meinen exec. Ausdrücke und Aussagen drastisch verschiedenen Einheiten in Python sind -. eval befasst sich nur mit Ausdrücken (ein nackter Ausdruck ist auch eine Aussage, so exec kann mit ihm sowie andere Aussagen beschäftigen)

exec Drehen, und grübeln die Situation als Python Core Committer, ich denke, es ist eine kleine Fehl Design: wie (redundant und nutzlos) Leerzeichen, Tabs und Form-Feeds, kurz bevor ein NEWLINE akzeptiert und ignoriert, so sollte (ebenso redundant und nutzlose) Zeilenumbrüche werden. Ich entschuldige mich: Ich denke, dass wir jemals nie in Betracht gezogen, dass jemand könnte will Zeilenumbrüche dort zu setzen - aber dann ist es nicht mehr Sinn machen, zum Beispiel zu haben Form-Feeds gibt, und wir akzeptieren , die ... so sehe ich keine Gründe Zeilenumbrüche für die Ablehnung (oder andere Unicode nicht-ANSI Leerzeichen, entweder jetzt, dass in Python 3 wir akzeptieren beliebige Unicode nicht ANSI alphanumerics in Identifikatoren).

Wenn Sie sich interessieren, wenden Sie sich bitte ein Problem auf Pythons issue tracker öffnen und (vorbehaltlich unvorhersehbarer Opposition von anderen Committer) Ich denke, ich kann es um 3,2 Python repariert (die aus in 12 bis 18 Monaten sein sollte - das ist eine Schätzung [informiert Vermutung], kein Versprechen, -).

Andere Tipps

Wollen Sie eval oder exec? Bitte senden Sie genau, was Sie läuft, sowie die vollständige Rückverfolgung und Fehlermeldung.

Das Problem ist wahrscheinlich, weil die Python Grammatik sagt, dass die Zeilen durch Zeilenumbrüche ( '\ n') beendet werden, nicht die Zwei-Zeichen-Sequenz '\ r \ n'.

Im Allgemeinen wäre es sicherer für Sie ersetzen zu verwenden ( ‚\ r \ n‘, ‚\ n‘), falls es eine sinnvolle ‚\ r‘ dort irgendwo. Es wäre besser, wenn Sie nicht den ‚\ r‘ dort in erster Linie haben ... wie Erhalten Sie den Text - binäre Lese auf einem Windows-??

Im Gespräch über Sicherheit, sollen Sie über die Verwendung von eval oder exec auf jedem alten Code von einem möglichen Feind erhielt vorsichtig sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top