web-dev-qa-db-ja.com

Pythonでは '\ x'が無効なのはなぜですか?

私は '\'文字を試し、 '\ a\b\c ...'を使用して、どの文字Pythonが制御文字として解釈されるか、そして何を解釈するかを自分自身で列挙しました。ここに私は見つかりました:

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

私が試した他のほとんどの文字、「\ g」、「\ s」などは、円記号と指定された文字の2文字の文字列に評価されます。これは意図的なものであり、理にかなっています。

しかし、「\ x」は問題です。スクリプトがこのソース行に到達すると:

val = "\x"

私は得る:

ValueError: invalid \x escape

「\ x」の何が特別なのですか?エスケープされていない他の文字とは異なる扱いをされるのはなぜですか?

25
PaulMcG

documentation にすべてのエスケープコードとその意味をリストした表があります。

エスケープシーケンス意味注意
\xhh 16進値hhの文字(4,5)

ノート:

4.標準Cとは異なり、正確に2桁の16進数が必要です。
5。文字列リテラルでは、16進数と8進数のエスケープは、指定された値を持つバイトを表します。バイトがソース文字セットの文字をエンコードする必要はありません。 Unicodeリテラルでは、これらのエスケープは指定された値を持つUnicode文字を示します。

21
Mark Byers

\xhh16進エスケープ文字 を表すために使用されます。

6
unutbu

xは、文字列内の(1バイトの)16進リテラルを定義するために使用されます。次に例を示します。

'\x61'

61はASCIIでaを表す97の16進値であるため、「a」と評価されます。

5
KillianDS

\ xには、照合する16進文字がありません:\ xnn->\x1B

4
Joscha

あなたは完全なエスケープシーケンスを与えていません:

\ xhh ...

16進値hh。hhは一連の16進数字(「0」〜「9」、および「A」〜「F」または「a」〜「f」)を表します。 ISO Cの同じ構成のように、エスケープシーケンスは、最初の非16進数字が見つかるまで続きます。 (c.e.)ただし、2桁を超える16進数を使用すると、未定義の結果が生成されます。 (「\ x」エスケープシーケンスはPOSIX awkでは許可されていません。)

差出人: http://www.gnu.org/software/gawk/manual/html_node/Escape-Sequences.html

1
joshschreuder