我试图通过添加 -bb
参数来使一些代码 str(bytes)
在 Python 3 上安全,这会将 str(bytes)
和 bytes/str 比较出错。
issue warnings about str(bytes_instance), str(bytearray_instance) and comparing bytes/bytearray with str. (-bb: issue errors)
程序失败,因为一个库试图构建一个包含 str
和 bytes
的集合,但它无法交互地重现:set([b 'foo', u'bar'])
有效。为什么只有 set([b'foo', u'foo'])
失败?
最佳答案
通过实验:
set(['foo', b'foo'])
返回包含两个对象的集合'foo'
和b'foo'
哈希为相等的值- 因此 Python 必须比较它们是否相等(否则该集合将只有一个成员),因此在
-bb
下会引发错误
>>> set(['foo', b'foo'])
{b'foo', 'foo'}
>>> hash('foo')
7554140378331821102
>>> hash(b'foo')
7554140378331821102
>>> hash('foo') == hash(b'foo')
True
>>> 'foo' == b'foo'
False
关于python - 运行 python3 -bb 时,为什么 set([b'foo', u'foo']) 失败但 set([b'foo', u'bar']) 成功?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56632571/