【问题标题】:TypeError: '<' not supported between instances of 'NoneType' and 'str'TypeError:“NoneType”和“str”的实例之间不支持“<”
【发布时间】:2018-11-22 09:52:33
【问题描述】:

我在尝试使用从 .db 文件中选择的集合的值创建 ttk.Combobox 时遇到此错误。

for row in self.sql.execute("SELECT {0} FROM Songinfo".format(self.variable1.get())):
        self.List2.append(row)
        self.seen.add(row)
self.Option2 = ttk.Combobox(self, values=sorted(self.seen), textvariable=self.variable2)
self.Option2.grid(row=3, column=1)

self.seen,当打印出来返回类似:

{('Heavy Metal',), ('Soundtrack',), ('Pop/Rock',), ('Metal',), 
 ('Alternative',), ('Alternative & Punk',), ('Rock',),
 ('Pop',), ('Classical Crossover',), (None,)}

这是一组流派。我收到了这个错误,我不知道为什么,直到最近才出现,感谢任何帮助,谢谢。

【问题讨论】:

  • 您应该首先删除 None 元组,或者不将其添加到列表中。
  • @DyZ 我知道这会解决它,但我尝试 .remove 它但我没有成功
  • 您究竟是如何尝试删除它的?
  • 好吧,做类似 [x for x in self.newlist if x is not None]。
  • x 是设置项。在您的情况下,它始终是一个元组,而不是 None,但它的第一个元素有时是。试试{x for x in self.seen if x[0] is not None}

标签: python set typeerror


【解决方案1】:

从你的集合中删除有问题的元组:

self.seen = {x for x in self.seen if x[0] is not None}

【讨论】:

  • 通过添加方括号,您将引入空元组的失败案例。虽然用 is/is not 来测试 None 是常规的,但用 == 来测试它是合法的,所以更安全的是 {x for x in self.seen if x[0] != (None,)}跨度>
  • @AaronBentley 一般来说,你是对的,在这种情况下,所有元组都是非空的。
【解决方案2】:

sorted(self.seen) 默认使用

【讨论】:

    猜你喜欢
    • 2018-01-10
    • 1970-01-01
    • 1970-01-01
    • 2022-08-02
    • 2021-08-19
    • 2021-11-21
    • 1970-01-01
    • 2020-05-05
    • 2021-03-18
    相关资源
    最近更新 更多