繁体   English   中英

python的字符串格式中的%a是什么

[英]what is %a in python's string formatting

我有一个关于字符串格式的基本问题。 我使用 python 2.7 和 3+ 进行编码

我知道 %s 用于字符或字符串

name = "John"
print("Hello, %s!" % name) 

你好约翰!

现在,如果我使用整数

name = 123
print("Hello, %s!" % name)

输出是你好,123!

当我确实想将其转换为字节时,就像这样

name = 123
print(b"Hello, %s!" % name)

在 python 2.7 中,它向我抛出一个错误,说%b requires bytes, or an object that implements __bytes__, not 'int'

name = 123
print(b"Hello, %a!" % name)

%a 是否明确用于获取字节类型的东西.. 我在网络上找不到关于 %a 的太多信息.. 并且有人广泛使用的旧代码使用了它,我正在调试它.. 所以需要一些帮助理解上述内容(在转换为字节时使用字符串或数字)

%a 将在插值上给出相当于 repr(some_obj).encode('ascii', 'backslashreplace') 的值。 用例包括开发新协议并将地标写入流中; 调试进入现有协议的数据,看看问题是协议本身还是坏数据; 序列化格式的回退; 或定义字节不合适但需要可读/信息性表示的任何情况[6]。

%r 作为 %a 的同义词包含在内,其唯一目的是使 2/3 代码库更易于维护。 Python 3 仅代码使用 %a

https://www.python.org/dev/peps/pep-0461/

在打印语句中,您可以用 str(name).encode() 替换 name 以消除您遇到的错误。

%b用于格式化打印语句中的字节值。

s = "hello"
s_bytes = str.encode(s)
type(s_bytes)

“字节”类

s_bytes

再见

print(b"The text is %b" % s_bytes)

b'文本是你好'

print(b"The text is %b" % s)

回溯(最近一次调用最后一次):文件“”,第 1 行,类型错误:%b 需要一个类似字节的对象,或实现bytes的对象,而不是 'str'

最重要的是,当您使用%b进行格式化时,您必须传递一个字节对象。

'%a' 字符串格式运算符。 '%a' 使用 repr() 将任何 python 对象转换为字符串,然后对所有非 ASCII 字符进行十六进制转义。 '%a' 格式运算符生成与 Python 2 中的 '%r' 相同的字符串。此外,将 '!a' 转换标志添加到 string.format() 方法并将 '%A' 运算符添加到

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM