python 3.4 涉及字节文字的条件 returns false 而不是 true
python 3.4 condition involving byte literal returns false instead of true
我使用 python 3.4 和 pymysql 连接到 MySQL 数据库。我有一个 select 查询,然后将 returns 结果全部提取到 r[] 中。 r[0] 只是结果元组的第一部分,它的值是一个空字符串(因为它应该基于数据库中的内容。)
然而,当我使用条件时:
if str(r[0]) == ''.encode('utf8'):
do something...
条件计算结果为假,而不是我期望的结果!我通过打印出零件的值来测试它以找出原因:
print(str(r[0]))
print(''.encode('utf8'))
print(str(r[0]) == ''.encode('utf8'))
这会打印:
b''
b''
False
知道为什么吗?这让我抓狂,因为它不应该这么难。我错过了什么?
您正在比较字节和 unicode,这必然会在 Python 中与 False 进行比较 3. 一些参考资料:
http://scikit-bio.org/docs/0.1.3/development/py3.html#gotchas
http://lucumr.pocoo.org/2013/7/2/the-updated-guide-to-unicode/
解决方案是不要在右侧的空字符串上调用 encode()
:
Python 3.4.2 (default, Oct 8 2014, 10:45:20)
[GCC 4.9.1] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> str(r[0]) == ''
True
如您所见,encode()
在 str
对象上的结果是字节:
>>> x = ''.encode('utf8')
>>> type(x)
<class 'bytes'>
我使用 python 3.4 和 pymysql 连接到 MySQL 数据库。我有一个 select 查询,然后将 returns 结果全部提取到 r[] 中。 r[0] 只是结果元组的第一部分,它的值是一个空字符串(因为它应该基于数据库中的内容。)
然而,当我使用条件时:
if str(r[0]) == ''.encode('utf8'):
do something...
条件计算结果为假,而不是我期望的结果!我通过打印出零件的值来测试它以找出原因:
print(str(r[0]))
print(''.encode('utf8'))
print(str(r[0]) == ''.encode('utf8'))
这会打印:
b''
b''
False
知道为什么吗?这让我抓狂,因为它不应该这么难。我错过了什么?
您正在比较字节和 unicode,这必然会在 Python 中与 False 进行比较 3. 一些参考资料:
http://scikit-bio.org/docs/0.1.3/development/py3.html#gotchas
http://lucumr.pocoo.org/2013/7/2/the-updated-guide-to-unicode/
解决方案是不要在右侧的空字符串上调用 encode()
:
Python 3.4.2 (default, Oct 8 2014, 10:45:20)
[GCC 4.9.1] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> str(r[0]) == ''
True
如您所见,encode()
在 str
对象上的结果是字节:
>>> x = ''.encode('utf8')
>>> type(x)
<class 'bytes'>