此代码
#!/usr/bin/env python
import pynotify
import time
import datetime
c='5/1/12 1:15 PM'
print c
dt = time.strptime(c, "%d/%m/%y %H:%M %p")
产生
5/1/12 1:15 PM
Traceback (most recent call last):
File "tmp.py", line 9, in <module>
dt = time.strptime(c, "%d/%m/%y %H:%M %p")
File "/usr/lib/python2.7/_strptime.py", line 454, in _strptime_time
return _strptime(data_string, format)[0]
File "/usr/lib/python2.7/_strptime.py", line 328, in _strptime
data_string[found.end():])
ValueError: unconverted data remains: PM
删除import pynotify
,
#!/usr/bin/env python
import time
import datetime
c='5/1/12 1:15 PM'
print c
dt = time.strptime(c, "%d/%m/%y %H:%M %p")
删除错误。
5/1/12 1:15 PM
为什么?!!?!
Python 2.7.2+(默认,2011年10月4日,20:06:09) linux2上的[GCC 4.6.1]
我添加了pynotify.__file__
和datetime.__file__
/usr/lib/python2.7/lib-dynload/datetime.so
/usr/lib/python2.7/dist-packages/gtk-2.0/pynotify/__init__.pyc
5/1/12 1:15 PM
Traceback (most recent call last):
File "a.py", line 11, in <module>
dt = time.strptime(c, "%d/%m/%y %H:%M %p")
File "/usr/lib/python2.7/_strptime.py", line 454, in _strptime_time
return _strptime(data_string, format)[0]
File "/usr/lib/python2.7/_strptime.py", line 328, in _strptime
data_string[found.end():])
ValueError: unconverted data remains: PM
5/1/12 1:15 PM
> /usr/lib/python2.7/_strptime.py(324)_strptime()
-> found = format_regex.match(data_string)
(Pdb) format
'%d/%m/%y %H:%M %p'
(Pdb) continue
> /usr/lib/python2.7/_strptime.py(329)_strptime()
-> if len(data_string) != found.end():
(Pdb) continue
> /usr/lib/python2.7/_strptime.py(331)_strptime()
-> raise ValueError("unconverted data remains: %s" %
(Pdb) len(data_string)
14
(Pdb) found.end()
12
(Pdb) found.group(0)
'5/1/12 1:15 '
'%d/%m/%y %H:%M %p'
似乎没有抓住所有'5/1/12 1:15 PM'
答案 0 :(得分:3)
这是一个有趣的问题。我打赌正在发生的事情是pynotify正在改变你的语言环境设置,这打破了strptime
对你的时间戳字符串的解释。
这是您的代码,其中包含几个调试打印语句,用于说明理论:
#!/usr/bin/env python
import time
import datetime
import locale
print locale.getlocale()
import pynotify
print locale.getlocale()
c='5/1/12 1:15 PM'
print c
dt = time.strptime(c, "%d/%m/%y %H:%M %p")
在我的系统上,我得到以下内容:
(None, None)
('en_US', 'UTF8')
5/1/12 1:15 PM
我没有收到你的错误,但pynotify可能会将你的语言环境设置为完全愚蠢的东西,这会使strptime感到困惑。
也许看一下你的语言环境设置并稍微调整一下,或者在调用strptime之前取消它(并在之后设置它,不知道pynotify会做出什么样的假设),或者如果你发现它的话,将其设置为理智的东西。陷入愚蠢的境地。