为什么在Python中'\x'是无效的?

26

我正在尝试使用 '\' 字符,使用 '\a\b\c...' 只是为了列举 Python 将哪些字符解释为控制字符以及其作用。以下是我的发现:

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

我试过的大多数其他字符,如'\g'、'\s'等,只会计算为反斜杠和给定字符的两个字符组成的字符串。我理解这是有意为之,并且对我来说很有道理。

但是'\x'就有问题了。当我的脚本到达这行代码时:

val = "\x"

我得到:

ValueError: invalid \x escape

'\x'有什么特殊之处?为什么它会与其他非转义字符不同对待?

5个回答

21

文档中有一个表格列出了所有转义代码及其含义。

转义序列     含义                             注意事项
\xhh        十六进制值为 hh 的字符              (4,5)

注意事项:

4. 与标准 C 不同,需要确切的两个十六进制数位。
5. 在字符串字面值中,十六进制和八进制转义表示具有给定值的字节;它不一定是在源字符集中编码的字符。在 Unicode 字面值中,这些转义表示具有给定值的 Unicode 字符。


6

6

x被用于在字符串中定义(一个字节)十六进制字面量,例如:

'\x61'

'will evaluate to 'a', 因为61是97的十六进制值,在ASCII中表示a

'


4

\x缺少您想匹配的十六进制字符:\xnn -> \x1B

(说明:此处为it技术相关内容,涉及转义字符,直接翻译即可)


1

你没有提供完整的转义序列:

\xhh...

其中 hh 为一系列十六进制数字('0'-'9',以及 'A'-'F' 或 'a'-'f')。与 ISO C 中的相同构造一样,转义序列会一直持续到遇到第一个非十六进制数字为止。然而,使用超过两个十六进制数字会产生未定义的结果。(在 POSIX awk 中不允许使用 '\x' 转义序列。)

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接