2009-08-12 1 views
1

Ich benutze python-twitter, um das Datum eines Tweet zu erhalten und versuchen, es mit der time.strptime() Funktion zu analysieren. Wenn ich es interaktiv mache, funktioniert alles gut. Wenn ich das Programm von meinem bash anrufe, bekomme ich ein ValueError sagen (zum Beispiel):Fehler mit time.strptime() und 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' 

-Code sieht wie folgt aus:

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

, die die Ausnahme oben genannten wirft.

Es funktioniert auf der interaktiven Shell:

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

Jemand eine Ahnung, warum dies geschieht?

Ich benutze Ubuntu 9.04, Python 2.6.2 und Python-Twitter 0.6. Alle Dateien in Unicode.

+1

Haben Sie vielleicht verschiedene Versionen von Python? Vergleichen Sie die Ausgabe von sys.version sowohl für die interaktive Shell als auch für den Standardinterpreter der bash-Shell. – Cide

+0

Nein, interaktive Shell sagt "2.6.2 (release26-maint, 19. April 2009, 01:56:41) \ n [GCC 4.3.3]" und Bash sagt (python --version) "Python 2.6.2" – dermatthias

Antwort

2

Dinge zu versuchen:

(1) Ist es möglich, dass Ihre interaktive Sitzung und Ihre „bash“ verschiedene Gegenden verwenden? Setzen Sie print time.strftime(some known struct_time) in Ihr Skript und sehen Sie, ob der Tag und der Monat in einer anderen Sprache erscheinen.

(2) Setzen Sie print repr(date) in Ihr Skript, um eindeutig zu zeigen, was Sie vom latest.GetCreatedAt() Anruf erhalten.

+0

(1) half, das Problem zu lösen. Danke vielmals! test = time.gmtime() print time.strftzeit ('% a% b% d% H:% M:% S +0000% Y', test) habe es in meinem locale (de_DE) gedruckt, also zum Beispiel Mittwoch für Mittwoch war Mit für Mittwoch. Das führte dazu, dass strptime() fehlschlug. Ich setze locale.setlocale (locale.LC_ALL, 'C'), was momentan funktioniert. Ich werde später etwas genauer auf dieses Thema eingehen. Danke noch einmal! – dermatthias