6

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'))

そして、ユニコードの警告が表示されます:

dateutil\parser.py:339: UnicodeWarning: Unicode の等しい比較で、両方の引数を Unicode に変換できませんでした - time.tzname の elif res.tzname と res.tzname が等しくないと解釈します:

やってみました

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

しかし、何も変わりません。

警告以外に、何も壊れていないようです。なぜこれが起こっているのか、それを修正する方法を知っている人はいますか?

ありがとう!

アップデート:

同じ例を試しましたが、時間を文字列にハードコーディングすると、警告なしで機能します。また、警告メッセージによると、解析呼び出しで問題が発生するようです。実行するとparser.py:339になります

res.tzname in time.tzname

おそらく、 res がユニコードで、 time.tzname がそうではないから??

4

2 に答える 2

5

これは、Windows でのみ発生する dateutil (バージョン 2.2 の時点) の未解決のバグです: https://bugs.launchpad.net/dateutil/+bug/1227221

非 ascii 文字を含むタイムゾーンを解析しようとしない限り、Dateutil は引き続き正しく動作します。これは非常に珍しいことだと思いますので、問題ないはずです。

最も簡単な回避策は、おそらくエラーを黙らせることです。

import warnings
warnings.filterwarnings("ignore", category=UnicodeWarning)
于 2014-05-03T22:38:05.480 に答える
3

質問からわずか 18 か月後、回答から 15 か月後に、おそらくこのバグを解決しました: https://github.com/dateutil/dateutil/issues/92 したがって、現在の解決策は、開発バージョンdateutilまたは任意のバージョンにアップグレードすることです>=2.5.0

于 2015-08-02T17:38:55.137 に答える