gpt4 book ai didi

python - Pynotify 搞砸了日期时间,为什么?

转载 作者:太空狗 更新时间:2023-10-30 00:11:48 25 4
gpt4 key购买 nike

问题

这段代码

#!/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 版本

Python 2.7.2+(默认,2011 年 10 月 4 日,20:06:09)Linux2 上的 [GCC 4.6.1]

pynotify.文件

我为 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

PDB

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'

最佳答案

这是一个有趣的问题。我敢打赌,正在发生的事情是 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 之前取消设置(并在调用 strptime 之后将其设置回去,不知道 pynotify 做了什么样的假设)或者如果您发现它是设置一些愚蠢的东西。

关于python - Pynotify 搞砸了日期时间,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10402304/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com