2009-08-12 3 views
1

私はpython-twitterを使ってツイートの日付を取得し、time.strptime()関数で解析しようとしています。インタラクティブに行うと、すべて正常に動作します。私は私のbashからプログラムを呼び出すと、私はValueErrorは、(例えば)と言っ取得:time.strptime()とpython-twitterのエラー

time data u'Wed Aug 12 08:43:35 +0000 2009' does not match 
      format '%a %b %d %H:%M:%S +0000 %Y' 

コードは次のようになります。上記の例外がスローされます

api = twitter.Api(username='username', password='pw') 
user = api.GetUser(username) 
latest = user.GetStatus() 
date = latest.GetCreatedAt() 
date_struct = time.strptime(date, '%a %b %d %H:%M:%S +0000 %Y') 

を。

それは対話型シェル上で動作します:

>>> user = api.GetUser('username') 
>>> latest = user.GetStatus() 
>>> date = latest.GetCreatedAt() 
>>> date 
u'Wed Aug 12 08:15:10 +0000 2009' 
>>>> struct = time.strptime(date, '%a %b %d %H:%M:%S +0000 %Y') 
>>>> struct 
time.struct_time(tm_year=2009, tm_mon=8, tm_mday=12, tm_hour=8, tm_min=15, tm_sec=10, tm_wday=2, tm_yday=224, tm_isdst=-1) 

誰かなぜこれが起こっている任意のアイデア?

私はUbuntu 9.04、Python 2.6.2、python-twitter 0.6を使用しています。ユニコードのすべてのファイル。しようとする

+1

おそらく、異なるバージョンのPythonを実行していますか? sys.versionの出力を、対話シェルとbashシェルのデフォルトインタプリタの両方と比較します。 – Cide

+0

いいえ、対話シェルは "2.6.2(release26-maint、Apr 19 2009、01:56:41)\ n [GCC 4.3.3]"とBashは(Python --version) "Python 2.6.2"と答えています – dermatthias

答えて

2

もの:

(1)それはあなたのインタラクティブなセッションとあなたの「bashは」異なるロケールを使用していることは可能ですか?スクリプトにprint time.strftime(some known struct_time)を入れて、曜日と月が別の言語で表示されるかどうかを確認してください。

(2)コールから何を得ているかを明確に示すために、print repr(date)をスクリプトに入れてください。

+0

(1)問題を解決するのに役立ちました。どうもありがとう! test = time.gmtime() print time.strftime( '%a%b%d%H:%M:%S +0000%Y'、test) これをロケール(de_DE)に出力します。水曜日の 'Wed'はMittwochのための 'Mit'だった。そのためにstrptime()が失敗しました。 現時点で動作しているlocale.setlocale(locale.LC_ALL、 'C')を設定しました。この問題については、後で詳しく見ていきます。再度、感謝します! – dermatthias