我遇到一个非常具体的问题。我目前正在尝试在集合中查找字符串。但是由于某种原因,找不到它,并且无法正确触发代码。
past_images = {}
def load_whitelist():
f = open("oldimages.txt", "r")
old_images = f.readlines()
global past_images
past_images = set()
for url in old_images:
url = url.split(",")
past_images.add(str(url))
f.close()
#
load_whitelist()
if not str(current_image) in past_images: # Issue is here.
for pastimages in past_images:
print(pastimages)
print(current_image)
The string I'm searching for and the list
您可以看到current_image
变量正返回past_images
中的内容。那么为什么代码要运行?
这非常令人沮丧,因为结果直接矛盾。使用此编码语句,print()
甚至不应运行。但它是。
答案 0 :(得分:0)
您是否有理由在多个地方将current_image
转换为字符串?您显示的代码不够多,因此很难说出来,但是我的第一个直觉是它是一个字符串(因为您正在做current_image = images.url
)。我假设images.url
是一个字符串。
但是,如果它不是字符串(也许这就是为什么要在多个地方进行转换以使其正常工作),那么无论该current_image
对象是什么类型,都完全有可能,具有覆盖的__str__
方法,这意味着print
时看到的内容与str(current_image)
时得到的内容不一定相同。
断言这东西确实是一个字符串。如果它是字符串,请摆脱无用的转换。如果不是,那可能就是您的问题所在。
答案 1 :(得分:0)
您有一个问题,因为集合past_images
中没有好的值。
查看代码的这一部分:
for url in old_images:
url = url.split(",")
past_images.add(str(url))
错误来自上面的代码。将此代码替换为以下代码:
for url in old_images:
url = url.split(",")
for i in url: # see here
past_images.add(str(i)) # and here
答案 2 :(得分:0)
我不小心将列表而不是条目添加到集合中。我通过将past_images.add(str(url))更改为past_images.update(url)
来解决此问题