Sto scrivendo un test per un programma che verrà utilizzato in più locale. Durante l'esecuzione del test in tedesco, ho ottenuto l'errorePerché Python memorizza le stringhe di formato dell'ora tedesche e spagnole (e altre?) Come% T nel modulo locale?
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/_strptime.py", line 454, in _strptime_time
return _strptime(data_string, format)[0]
File "/usr/local/lib/python2.7/_strptime.py", line 317, in _strptime
(bad_directive, format))
ValueError: 'T' is a bad directive in format '%T'
Scavando in questo, ho scoperto che l'uso di locale.nl_langinfo(locale.T_FMT)
mentre in tedesco o spagnolo (e potenzialmente altre lingue) produce la stringa di formato '%T'
. Questo non è riconosciuto nello time
module.
La documentazione su locale
allo python.org non menziona nulla sulla restituzione di '%T'
. L'unico riferimento a '%T'
che ho trovato dovunque è in una risposta a a separate StackOverflow question. Da quel post e dal contesto, suppongo che '%T'
sia una scorciatoia per '%H:%M:%S'
.
La mia domanda è, come faccio a gestire i locali per i quali locale
tornerà '%T'
per la sua stringa di formato senza fare qualcosa di simile a
if fmt_str == '%T':
fmt_str = '%H:%M:%S'
per gestire questi casi?
+1 Molto strano. Un modulo standard commette errori incondizionatamente, con un messaggio di errore assurdo, semplicemente a causa di una modifica della locale? – delnan
Il problema sembra essere che i due moduli non comunicano tra loro e 'locale' ha iniziato a usare una scorciatoia che' time' non riconosce. Il che è molto strano, perché entrambi dovrebbero rispettare lo standard unix "date"; 'locale' fa mentre' time' apparentemente no. – Staunch
Non è che il mio ambiente locale supporti '% T', è che' locale' usa '% T' come scorciatoia per'% H:% M:% S' ma 'tempo' no.Le abbreviazioni in 'locale' corrispondono ai formati della funzione' date' di Unix (per vederli, scrivi 'date --h' su una riga di comando), ma' time' usa un elenco ridotto di abbreviazioni. Per la cronaca, '% X' funzionerebbe, ma non è quello che viene restituito da' locale'. – Staunch