2010-04-24 23 views
22

J'expérimentais avec les caractères '\', en utilisant '\ a \ b \ c ...' juste pour énumérer moi-même les caractères que Python interprète comme des caractères de contrôle, et à quoi. Voici ce que j'ai trouvé:Pourquoi ' x' est-il invalide en Python?

\a - BELL 
\b - BACKSPACE 
\f - FORMFEED 
\n - LINEFEED 
\r - RETURN 
\t - TAB 
\v - VERTICAL TAB 

La plupart des autres personnages que j'essayées, « \ g », « \ » s, etc. juste à évaluer chaîne 2 caractères d'une barre oblique inverse et le caractère donné. Je comprends que c'est intentionnel et cela a du sens pour moi.

Mais '\ x' est un problème. Lorsque mon script atteint cette ligne de source:

val = "\x" 

Je reçois:

ValueError: invalid \x escape 

Ce qui est si spécial '\ x'? Pourquoi est-il traité différemment des autres caractères non échappés?

Répondre

20

Il y a un tableau répertoriant tous les codes d'échappement et leur signification dans le documentation.

 
Escape Sequence Meaning      Notes 
\xhh    Character with hex value hh (4,5) 

Notes:

4. Contrairement à la norme C, deux chiffres hexadécimaux exactement sont nécessaires.
5. Dans une chaîne, les échappées hexadécimales et octales désignent l'octet avec la valeur donnée; il n'est pas nécessaire que l'octet code un caractère dans le jeu de caractères source. Dans un littéral Unicode, ces échappées indiquent un caractère Unicode avec la valeur donnée.

+0

Ooof! Bien sûr, merci! – PaulMcG

4

\ x manque le caractère hexadécimal que vous voulez correspondre: \ xnn -> \ x1B

5

x est utilisé pour définir (un octet) littéraux hexadécimaux dans les chaînes, par exemple:

'\x61' 

évaluera à « a », parce que 61 est la valeur hexadécimale de 97, ce qui représente un en ASCII

1

Vous ne donnez pas la séquence complète d'échappement:

\ xhh ...

la valeur hexadécimale hh, whe re hh représente une séquence de chiffres hexadécimaux ('0' - '9', et soit 'A' - 'F' ou 'a' - 'f'). Comme la construction dans la norme ISO C, la séquence d'échappement continue jusqu'à ce que le premier chiffre non hexadécimal soit vu. (c.e.) Cependant, l'utilisation de plus de deux chiffres hexadécimaux produit des résultats indéfinis. (Le « \ x » échapper séquence est pas autorisée dans awk POSIX.)

De: http://www.gnu.org/software/gawk/manual/html_node/Escape-Sequences.html