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

时间:2019-08-12 18:39:15

标签: python string-formatting

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

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

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

你好,约翰!

现在,如果我使用整数

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

输出为Hello,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是显式地用于接收字节的东西..我在Web上找不到有关%a的更多信息..并且有人编写的旧代码广泛使用了它,并且我正在调试.. SO需要一些帮助来理解上述内容(在转换为字节时使用字符串或数字)

4 个答案:

答案 0 :(得分:1)

  

%a将给出repr(some_obj).encode('ascii',   内插值上的'backslashreplace')。用例包括   开发新协议并将地标写入流中;   调试进入现有协议的数据以查看问题   是协议本身还是不良数据;序列化的后备   格式;或无法定义 bytes 的任何情况   适当,但需要可读/有信息的表示形式[6]。

     

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

void write(std::ostream& o) { o << "Some text..." << std::endl; } std::unique_ptr<std::ostream> stream( argc == 2 ? std::make_unique<std::ofstream>(argv[1]) : std::make_unique<std::ostream>(std::cout.rdbuf()) ); write(*stream); 用于格式化print语句中的字节值。

%b

“字节”类

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

b'hello'

s_bytes

b'文本打招呼'

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

回溯(最近通话最近):   文件“”,第1行,位于 TypeError:%b需要一个类似字节的对象,或者一个实现 bytes 而不是'str'

的对象

最重要的是,在使用print(b"The text is %b" % s) 进行格式化时,必须传递一个字节对象。

答案 3 :(得分:0)

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