为什么在我的集合中没有检测到我的字符串?

时间:2019-10-18 23:28:33

标签: python

我遇到一个非常具体的问题。我目前正在尝试在集合中查找字符串。但是由于某种原因,找不到它,并且无法正确触发代码。

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()甚至不应运行。但它是。

3 个答案:

答案 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)

来解决此问题