【问题标题】:python dateutil unicode warningpython dateutil unicode 警告
【发布时间】:2014-02-13 07:27:10
【问题描述】:

我正在使用 Sixohsix 库从 Twitter API 解析一些推文数据。我正在尝试将推文的日期转换为我的语言环境:

from pytz import timezone
from dateutil import parser

timestamp = parser.parse(tweet["created_at"])
timestamp_arg = timestamp.astimezone(timezone('America/Buenos_Aires'))

我收到一个 unicode 警告:

dateutil\parser.py:339: UnicodeWarning: Unicode 相等比较 未能将两个参数都转换为 Unicode - 将它们解释为 不相等的 elif res.tzname 和 res.tzname 在 time.tzname 中:

我试过了

parser.parse(str(tweet["created_at"]))
parser.parse(unicode(tweet["created_at"]).encode())

但没有任何改变。

除了警告之外,似乎没有任何问题。 有谁知道为什么会发生这种情况,以及如何解决?

谢谢!

更新:

我尝试了相同的示例,但将时间硬编码为字符串,并且在没有警告的情况下工作。同样根据警告消息,问题似乎发生在解析调用中,在 parser.py:339 中进行

res.tzname in time.tzname

可能是因为 res 是 unicode 而 time.tzname 不是??

【问题讨论】:

  • 你能发布整个堆栈跟踪吗?哪条线路出现故障?
  • 另外,您遇到的错误可能建议使用u'America/Buenos_Aires'
  • 最后的 encode() 不太可能有任何帮助,因为警告显然在你到达那一步之前已经发生了。通常,仅在没有编码的情况下调用 strunicode 是一个非常糟糕的主意,尤其是来自互联网的内容,因此可能具有与系统默认编码不同的编码。
  • 另外,如果您要问关于像dateutil 这样的第三方库的问题,通常值得一提的是版本。特别是对于最近才移植到双 2.x/3.x 兼容代码的库,并且很容易在您拥有的版本中出现错误,第二天就修复了。
  • 所以@goncalopp 不知道该怎么做,因为没有例外或“崩溃”,只是警告和脚本继续运行。 dateutil 版本是 2.2(今天安装)。

标签: python twitter unicode python-dateutil


【解决方案1】:

这是 dateutil(截至 2.2 版)中未解决的错误,仅在 Windows 上出现:https://bugs.launchpad.net/dateutil/+bug/1227221

除非您尝试使用非 ascii 字符解析时区,否则 Dateutil 仍将正常运行。我认为这是非常不寻常的,所以你应该没问题。

最简单的解决方法可能就是让错误静音。

import warnings
warnings.filterwarnings("ignore", category=UnicodeWarning)

【讨论】:

    【解决方案2】:

    仅在问题后 18 个月和答案后 15 个月,我们可能已经解决了这个错误:https://github.com/dateutil/dateutil/issues/92 所以目前的解决方案是升级到开发版dateutil或者任意版本>=2.5.0

    【讨论】:

    • 你好。这个bug还在windows上,dateutil版本是v2.5.3。
    • v2.6.0 仍然抛出 UnicodeWarning .... elif res.tzname 和 res.tzname in time.tzname
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-27
    • 1970-01-01
    • 1970-01-01
    • 2021-12-12
    • 1970-01-01
    相关资源
    最近更新 更多