【发布时间】:2011-08-25 20:15:24
【问题描述】:
我正在为将在多个语言环境中使用的程序编写测试。在用德语运行测试时,我得到了错误
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'
深入研究后,我发现在德语或西班牙语(可能还有其他语言)中使用locale.nl_langinfo(locale.T_FMT) 会产生格式字符串'%T'。这在time module 中无法识别。
python.orglocale 上的文档没有提到任何关于返回 '%T' 的内容。我在任何地方都能找到对'%T' 的唯一引用是对a separate StackOverflow question 的回复。从那篇文章和上下文来看,我假设'%T' 是'%H:%M:%S' 的简写。
我的问题是,我如何处理 locale 将为其格式字符串返回 '%T' 的语言环境而不做类似的事情
if fmt_str == '%T':
fmt_str = '%H:%M:%S'
处理那些案件?
【问题讨论】:
-
+1 很奇怪。一个标准模块无条件地出错,带有糟糕的错误消息,仅仅是因为语言环境的变化?
-
问题似乎是这两个模块只是不相互通信,
locale开始使用time无法识别的简写。这很奇怪,因为它们都应该遵守 unixdate标准;locale会,而time显然不会。 -
不是我的本地环境支持
%T,而是locale使用%T作为%H:%M:%S的简写,而time不支持。locale中的缩写与 Unix 的date函数的格式相匹配(要查看它们,请在命令行中键入date --h),但time使用精简的缩写列表。作为记录,%X可以工作,但这不是locale返回的内容。
标签: python time locale string-formatting