我有一个关于字符串格式的基本问题。我将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需要一些帮助来理解上述内容(在转换为字节时使用字符串或数字)
答案 0 :(得分:1)
%a将给出repr(some_obj).encode('ascii', 内插值上的'backslashreplace')。用例包括 开发新协议并将地标写入流中; 调试进入现有协议的数据以查看问题 是协议本身还是不良数据;序列化的后备 格式;或无法定义 bytes 的任何情况 适当,但需要可读/有信息的表示形式[6]。
%r作为%a的同义词包含在内,其唯一目的是使2/3 代码库更易于维护。仅Python 3代码使用%a
答案 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' 运算符添加到