Pynotify винты до даты и времени, почему?
Эта проблема
Этот код
#!/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+ (по умолчанию, 4 октября 2011 г., 20:06:09) [GCC 4.6.1] на linux2
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 13:15"
1 ответ
Это забавная проблема. Держу пари, что происходит то, что 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), либо установите его на что-то вменяемое, если вы обнаружите, что оно установлено на что-то глупо.