Estoy escribiendo una prueba para un programa que se utilizará en múltiples configuraciones regionales. Mientras se ejecuta la prueba en alemán, me dieron el error¿Por qué Python almacena cadenas de formato de tiempo en alemán y español (y otras?) Como% T en el módulo de configuración regional?
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'
de excavación en esto, he descubierto que el uso de locale.nl_langinfo(locale.T_FMT)
mientras que en alemán o español (y potencialmente otros idiomas) produce la cadena de formato '%T'
. Esto no se reconoce en el time
module.
La documentación en locale
en python.org no menciona nada acerca de devolver '%T'
. La única referencia a '%T'
que pude encontrar en cualquier lugar es en respuesta a a separate StackOverflow question. De esa publicación y contexto, asumo que '%T'
es una abreviatura de '%H:%M:%S'
.
Mi pregunta es, ¿Cómo se gestionan los lugares para los que locale
volverá '%T'
por su cadena de formato sin hacer algo como
if fmt_str == '%T':
fmt_str = '%H:%M:%S'
para manejar esos casos?
+1 Muy raro. ¿Un módulo estándar se equivoca incondicionalmente, con un mensaje de error sucksy, simplemente debido a un cambio de configuración regional? – delnan
El problema parece ser que los dos módulos simplemente no se comunican entre sí y 'locale' comenzó a usar la taquigrafía que' time' no reconoce. Lo cual es muy extraño, porque se supone que ambos deben cumplir con el estándar 'date' de Unix; 'locale' hace mientras' time' aparentemente no. – Staunch
No es que mi entorno local admita '% T', es que' locale' usa '% T' como la abreviatura de'% H:% M:% S' pero 'time' no.Las abreviaturas en 'locale' coinciden con los formatos de la función' date' de Unix (para verlos, escribe 'date --h' en una línea de comando), pero' time' usa una lista de abreviaturas reducida. Para el registro, '% X' funcionaría, pero eso no es lo que' local' devuelve. – Staunch