Question

Pourquoi la fonction eval ne fonctionne pas avec \ r \ n mais avec \ n. par exemple eval ("pour i dans la plage (5): \ r \ n print 'hello'") ne fonctionne pas eval ("pour i dans la plage (5): \ n print 'hello'") fonctionne

Je sais qu’il n’ya pas de problème car l’utilisation de replace ("\ r", "") est corrigée, mais quelqu'un sait pourquoi cela se produit?

- Modifier-- Oh! désolé, exactement, je voulais dire exec. Les retours de chariot sont apparus parce que je lis un texte HTML via POST (je suis sur une machine Linux). maintenant, c’est plus clair, merci à tous.

Était-ce utile?

La solution

Vous avez une définition étrange du "travail":

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

Je ne sais pas pourquoi vous utilisez eval . Je suppose que vous voulez dire exec . Les expressions et les instructions sont des entités radicalement différentes dans Python - eval ne traite que des expressions (une expression nue est également une instruction, de sorte que exec puisse traiter avec elle ainsi que d'autres déclarations).

En ce qui concerne exec , et en réfléchissant à la situation en tant qu'attribut principal de Python, je pense qu'il s'agit d'un problème de conception mineur: tout comme les espaces, les onglets et les formulaires (redondants et inutiles) juste avant une NEWLINE sont acceptés et ignorés, de même que les retours de chariot (tout aussi redondants et inutiles). Je m'excuse: je pense que nous n'avons jamais envisagé que quelqu'un puisse vouloir y placer des retours chariot - mais cela n'a aucun sens d'avoir par exemple un exemple. formulaire y est alimenté, et nous acceptons que ... je ne vois donc aucune raison de rejeter les retours à la ligne (ou d’autres espaces non-ANSI Unicode, non plus, maintenant que dans Python 3, nous acceptons les non-arbitrages Unicode arbitraires. ANSI alphanumériques dans les identificateurs).

Si vous le voulez bien, ouvrez un numéro sur le suivi des problèmes de Python, et (à moins d'une opposition imprévue d'autres commissaires), je pense que je peux le faire réparer par Python 3.2 (qui devrait paraître dans 12 à 18 mois - c'est une estimation [deviner informée], pas une promesse; -).

Autres conseils

Voulez-vous dire eval ou exec? Veuillez publier exactement ce que vous avez exécuté, ainsi que le message de suivi complet et le message d'erreur.

Le problème est probablement dû au fait que la grammaire Python indique que les lignes sont terminées par des nouvelles lignes ('\ n'), et non par la séquence à deux caractères '\ r \ n'.

En général, il serait plus prudent d'utiliser substitut ('\ r \ n', '\ n') au cas où il y aurait un '\ r' significatif quelque part. Ce serait mieux si vous n'aviez pas le '\ r' en premier lieu ... comment obtenez-vous le texte - la lecture binaire sur une fenêtre Windows ??

À propos de sécurité, vous devez faire attention à ne pas utiliser eval ou exec sur tout ancien code obtenu d'un ennemi potentiel.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top