我确信这有一个非常简单的解决方案,但我仍然是Python的新手。
我正在尝试使用dateutil.parser.parse()来解析其中包含时间戳的字符串:
>>> import dateutil.parser
>>> a = dateutil.parser.parse("2011-10-01 12:00:00+01:00")
>>> print a
2011-10-01 12:00:00+01:00
这在我的Linux服务器上运行正常,但在我的Windows测试框中它会出错:
>>> import dateutil.parser
>>> a = dateutil.parser.parse("2011-10-01 12:00:00+01:00")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\lib\site-packages\python_dateutil-2.0-py2.7.egg\dateutil\parser.py", line 698, in parse
return DEFAULTPARSER.parse(timestr, **kwargs)
File "C:\Python27\lib\site-packages\python_dateutil-2.0-py2.7.egg\dateutil\parser.py", line 302, in parse
res = self._parse(timestr, **kwargs)
File "C:\Python27\lib\site-packages\python_dateutil-2.0-py2.7.egg\dateutil\parser.py", line 350, in _parse
l = _timelex.split(timestr)
File "C:\Python27\lib\site-packages\python_dateutil-2.0-py2.7.egg\dateutil\parser.py", line 144, in split
return list(cls(s))
File "C:\Python27\lib\site-packages\python_dateutil-2.0-py2.7.egg\dateutil\parser.py", line 44, in __init__
instream = StringIO(instream)
TypeError: initial_value must be unicode or None, not str
如果我尝试给dateutil.parser.parse()一个unicode字符串,那么在Windows框中也不起作用:
>>> a = dateutil.parser.parse(unicode("2011-10-01 12:00:00+01:00"))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\lib\site-packages\python_dateutil-2.0-py2.7.egg\dateutil\parser.py", line 698, in parse
return DEFAULTPARSER.parse(timestr, **kwargs)
File "C:\Python27\lib\site-packages\python_dateutil-2.0-py2.7.egg\dateutil\parser.py", line 302, in parse
res = self._parse(timestr, **kwargs)
File "C:\Python27\lib\site-packages\python_dateutil-2.0-py2.7.egg\dateutil\parser.py", line 350, in _parse
l = _timelex.split(timestr)
File "C:\Python27\lib\site-packages\python_dateutil-2.0-py2.7.egg\dateutil\parser.py", line 144, in split
return list(cls(s))
TypeError: iter() returned non-iterator of type '_timelex'
然而,这也可以在Linux机器上运行。
答案 0 :(得分:15)
这不是Windows问题,而是Python版本/库版本问题。
编写dateutil 2.0只支持Python 3,而不支持Python 2.X.与Python 2.X一起使用时,这两种情况都包含错误。
在第一种情况下:
dateutil.parser.parse("2011-10-01 12:00:00+01:00")
io.StringIO
类只允许使用unicode参数,但代码为:
if isinstance(instream, str):
instream = StringIO(instream)
在第二种情况下:
dateutil.parser.parse(unicode("2011-10-01 12:00:00+01:00"))
如果查看_timelex
类,它包含__next__
方法,这是Python3指示对象支持迭代协议的方式。在Python 2.X中,方法的名称应为next
。
检查Linux和Windows上是否有相同版本的Python和库。来自project website:
python-dateutil-2.0.tar.gz(Python&gt; = 3.0)
python-dateutil-1.5.tar.gz(Python&lt; 3.0)