python3 write_Python 3 TypeError:必须是str,而不是sys.stdout.write()的字节

Python 3处理的字符串有点不同。最初只有一种类型

字符串:str。当unicode在90年代得到广泛应用时,新的unicode类型

添加到处理Unicode而不破坏先前存在的代码1。这是

实际上与str相同,但支持多字节。

在Python 3中有两种不同的类型:类型。这只是一个字节序列,Python不知道

任何关于如何将其解释为字符的信息。

类型。这也是一个字节序列,但是Python知道如何

将这些字节解释为字符。

已删除单独的unicode类型。str现在支持unicode。

在Python 2中,隐式地假设一个编码可能会导致很多问题;您

可能使用了错误的编码,或者数据在

全部(例如,它是PNG图像)。

显式告诉Python要使用哪个编码(或显式告诉它

猜猜)通常更好,更符合“Python哲学”

在“explicit is better than implicit”中。

此更改与Python2不兼容,因为许多返回值已更改,

导致像这样微妙的问题;这可能是为什么

Python 3的采用非常缓慢。因为Python没有静态类型2

不可能用脚本(例如

2to3)。您可以使用bytes('h€llo', 'utf-8')将str转换为bytes;这应该

生产b'H\xe2\x82\xacllo'。注意一个字符是如何转换为三个字符的

字节。

您可以使用b'H\xe2\x82\xacllo'.decode('utf-8')将bytes转换为str。

当然,在您的情况下,UTF-8可能不是正确的字符集,所以请确保

使用正确的。

在你的特定代码中,nextline是bytes类型,而不是str,

从Python 3中的subprocess读取stdout和stdin从str更改为

bytes。这是因为Python不能确定使用哪种编码。它

可能使用与sys.stdin.encoding(系统编码)相同的方法,

但不能肯定。

您需要替换:sys.stdout.write(nextline)

使用:sys.stdout.write(nextline.decode('utf-8'))

或者可能:sys.stdout.write(nextline.decode(sys.stdout.encoding))

您还需要将if nextline == ''修改为if nextline == b'',因为:>>> '' == b''

False

1使用ASCII有一些简单的技巧,但不能使用多字节字符集;最著名的例子是“带空格的异或来切换大小写”(例如chr(ord('a') ^ ord(' ')) == 'A')和“设置第6位来生成控制字符”(例如ord('\t') + ord('@') == ord('I'))。ASCII是在操作单个位是对性能影响不可忽略的操作时设计的。

2是的,您可以使用函数注释,但它是一个相对较新的功能,很少使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值