gpt4 book ai didi

涉及字节文字的 python 3.4 条件返回 false 而不是 true

转载 作者:行者123 更新时间:2023-11-29 12:28:34 25 4
gpt4 key购买 nike

我使用 python 3.4 和 pymysql 连接到 MySQL DB。我有一个选择查询,然后 fetchall 将结果返回到 r[] 中。 r[0] 只是结果元组的第一部分,它的值是一个空字符串(因为它应该基于数据库中的内容。)

但是,当我使用条件时:

if str(r[0]) == ''.encode('utf8'):
do something...

该条件的计算结果为 false,而不是我所期望的 true!我通过打印该部件的值来测试它以找出原因:

    print(str(r[0]))
print(''.encode('utf8'))
print(str(r[0]) == ''.encode('utf8'))

打印:

b''
b''
False

知道为什么吗?这让我发疯,因为它不应该这么难。我错过了什么?

最佳答案

您正在比较字节和 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

如您所见,str 对象上 encode() 的结果是字节:

>>> x = ''.encode('utf8')
>>> type(x)
<class 'bytes'>

关于涉及字节文字的 python 3.4 条件返回 false 而不是 true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27937420/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com