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

发布于 2024-08-30 11:05:20 字数 449 浏览 12 评论 0原文

我正在尝试使用“\”字符,使用“\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' 有什么特别之处?为什么它的处理方式与其他非转义字符不同?

I was experimenting with '\' characters, using '\a\b\c...' just to enumerate for myself which characters Python interprets as control characters, and to what. Here's what I found:

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

Most of the other characters I tried, '\g', '\s', etc. just evaluate to the 2-character string of a backslash and the given character. I understand this is intentional, and makes sense to me.

But '\x' is a problem. When my script reaches this source line:

val = "\x"

I get:

ValueError: invalid \x escape

What is so special about '\x'? Why is it treated differently from the other non-escaped characters?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

不醒的梦 2024-09-06 11:05:20

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

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

注释:

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

There is a table listing all the escape codes and their meanings in the documentation.

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

Notes:

4. Unlike in Standard C, exactly two hex digits are required.
5. In a string literal, hexadecimal and octal escapes denote the byte
with the given value; it is not necessary that the byte encodes a character
in the source character set. In a Unicode literal, these escapes denote a
Unicode character with the given value.

懵少女 2024-09-06 11:05:20

\xhh 用于表示十六进制转义字符

\xhh is used to represent hex escape characters.

ゝ杯具 2024-09-06 11:05:20

x 用于定义字符串中的(一个字节)十六进制文字,例如:

'\x61'

将计算为 'a',因为 61 是 97 的十六进制值,在 ASCII 中表示 a

x is used to define (one byte) hexadecimal literals in strings, for example:

'\x61'

will evaluate to 'a', because 61 is the hexadecimal value of 97, which represents a in ASCII

鸢与 2024-09-06 11:05:20

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

\x is missing the hex character you want to match against: \xnn -> \x1B

深海夜未眠 2024-09-06 11:05:20

您没有给出完整的转义序列:

\xhh...

十六进制值 hh,其中 hh 代表一系列
十六进制数字(“0”–“9”,以及“A”–“F”或“a”–“f”)。就像
ISO C 中的结构相同,转义序列一直持续到第一个
看到非十六进制数字。 (ce) 但是,使用两个以上
十六进制数字产生未定义的结果。 ('\x'转义
POSIX awk 中不允许使用序列。)

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

You're not giving the full escape sequence:

\xhh...

The hexadecimal value hh, where hh stands for a sequence of
hexadecimal digits (‘0’–‘9’, and either ‘A’–‘F’ or ‘a’–‘f’). Like the
same construct in ISO C, the escape sequence continues until the first
nonhexadecimal digit is seen. (c.e.) However, using more than two
hexadecimal digits produces undefined results. (The ‘\x’ escape
sequence is not allowed in POSIX awk.)

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文