【问题标题】:Python giving UnicodeWarning when calling remove() on a list containing unicode stringsPython 在对包含 unicode 字符串的列表调用 remove() 时给出 UnicodeWarning
【发布时间】:2012-04-26 08:24:03
【问题描述】:

我有两个包含 unicode 字符串的列表。我正在尝试从 availablesongs 中删除所有出现在最近歌曲中的元素。

以下代码导致问题(异常子句注释掉以进行调试):

for x in recentsongs:
    #try:
        availablesongs.remove(x)
    #except ValueError:
    #   pass

当列表包含纯 ASCII 字符串时,此代码可以正常工作,但是当引入其他语言的字符时,它会失败:

UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal
  availablesongs.remove(x)
ValueError: list.remove(x): x not in list

错误来自 remove() 函数本身,这让我很困惑。我该如何解决这个问题?

【问题讨论】:

  • 将所有内容转换为 unicode,或将所有内容转换为相同的编码。不要混合使用 unicode 和编码文本。
  • Thanks... 这个page 确实帮助我解决了我的问题。函数“to_unicode_or_bust”有效,我只是编写了一个附加函数来事先在数组上迭代它。
  • 我发现一个重要的事情是 os.listdir() 并不总是返回具有正确编码的字符串。

标签: python string list unicode


【解决方案1】:

os.listdir() 导致了我的一些问题,因为它有时会返回 unicode 字符串,有时不会。函数to_unicode_or_bust 用于修复其余部分。

【讨论】:

    【解决方案2】:

    我会做什么:

    list(set(availablesongs)-set(recentsongs))
    

    【讨论】:

    • 我没有尝试过,但它似乎会丢失列表的顺序,如果顺序很重要,那就不好了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-06
    • 2013-08-18
    • 2020-12-19
    • 2021-11-17
    • 2019-01-29
    • 2012-04-17
    • 1970-01-01
    相关资源
    最近更新 更多