2010-04-24 9 views
22

Stavo sperimentando con i caratteri '\', usando '\ a \ b \ c ...' solo per enumerare per me stesso quali caratteri interpretano Python come caratteri di controllo e cosa. Ecco cosa ho trovato:Perché ' x' non è valido in Python?

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

La maggior parte degli altri personaggi che ho provato, '\ g', '\' s, ecc solo restituiscono la stringa di 2 caratteri di una barra rovesciata e il carattere determinato. Capisco che è intenzionale e ha senso per me.

Ma "\ x" è un problema. Quando il mio script raggiunge questa linea fonte:

val = "\x" 

ottengo:

ValueError: invalid \x escape 

Cosa c'è di così speciale '\ x'? Perché viene trattato diversamente dagli altri personaggi non evasi?

risposta

20

C'è una tabella che elenca tutti i codici di escape ed i loro significati nel documentation.

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

Note:

4. A differenza di standard C, sono tenuti esattamente due cifre esadecimali.
5. In una stringa letterale, gli escape esadecimali e ottali indicano il byte con il valore dato; non è necessario che il byte codifichi un carattere nel set di caratteri di origine. In un letterale Unicode, queste escapes denotano un carattere Unicode con il valore specificato.

+0

ooof! Certo, grazie! – PaulMcG

4

\ x manca il carattere Hex si desidera abbinare contro: \ xnn -> \ X1b

5

x è usato per definire (un byte) letterali esadecimali in stringhe, per esempio:

'\x61' 

valuteranno ad 'a', perché 61 è il valore esadecimale di 97, che rappresenta una in ASCII

1

non stai dando la piena sequenza di escape:

\ xhh ...

HH valore esadecimale, whe re hh sta per una sequenza di cifre esadecimali ('0' - '9' e 'A' - 'F' o 'a' - 'f'). Come lo stesso costrutto in ISO C, la sequenza di escape continua fino a quando non viene visualizzata la prima cifra non esadecimale . (c.e.) Tuttavia, l'uso di più di due cifre esadecimali produce risultati non definiti. (Il ‘\ x’ escape sequenza non è consentita in POSIX awk.)

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