我使用python 3.4和pymysql连接MySQL DB。我有一个select查询然后fetchall将结果返回到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
知道为什么吗?这让我疯了,因为它不应该这么难。我错过了什么?
答案 0 :(得分:1)
您正在比较字节和unicode,并且这必然会在Python 3中与False进行比较。一些引用:
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'>