Python parser.parse()给出错误;初始“U值必须是unicode或None,而不是str”;在Windows平台上
我确信有一个非常简单的解决方案,但我对Python还是相当陌生的 我正在尝试使用dateutil.parser.parse()解析带有时间戳的字符串:Python parser.parse()给出错误;初始“U值必须是unicode或None,而不是str”;在Windows平台上,python,python-dateutil,Python,Python Dateutil,我确信有一个非常简单的解决方案,但我对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服务器上可以正常工作,但在
>>> 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
>>>a=dateutil.parser.parse(“2011-10-01 12:00:00+01:00”)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“C:\Python27\lib\site packages\python\u dateutil-2.0-py2.7.egg\dateutil\parser.py”,第698行,在parse中
返回DEFAULTPARSER.parse(timestr,**kwargs)
文件“C:\Python27\lib\site packages\python\u dateutil-2.0-py2.7.egg\dateutil\parser.py”,第302行,在parse中
res=自我解析(timestr,**kwargs)
文件“C:\Python27\lib\site packages\python\u dateutil-2.0-py2.7.egg\dateutil\parser.py”,第350行,在\u parse中
l=_timelex.split(timestr)
文件“C:\Python27\lib\site packages\python\u dateutil-2.0-py2.7.egg\dateutil\parser.py”,第144行,拆分
退货清单(cls)
文件“C:\Python27\lib\site packages\python\u dateutil-2.0-py2.7.egg\dateutil\parser.py”,第44行,在\uuu init中__
河道内=StringIO(河道内)
TypeError:初始值必须是unicode或None,而不是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'
>a=dateutil.parser.parse(unicode(“2011-10-01 12:00:00+01:00”))
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“C:\Python27\lib\site packages\python\u dateutil-2.0-py2.7.egg\dateutil\parser.py”,第698行,在parse中
返回DEFAULTPARSER.parse(timestr,**kwargs)
文件“C:\Python27\lib\site packages\python\u dateutil-2.0-py2.7.egg\dateutil\parser.py”,第302行,在parse中
res=自我解析(timestr,**kwargs)
文件“C:\Python27\lib\site packages\python\u dateutil-2.0-py2.7.egg\dateutil\parser.py”,第350行,在\u parse中
l=_timelex.split(timestr)
文件“C:\Python27\lib\site packages\python\u dateutil-2.0-py2.7.egg\dateutil\parser.py”,第144行,拆分
退货清单(cls)
TypeError:iter()返回了类型为“\u timelex”的非迭代器
但这也适用于Linux机器。这不是Windows的问题,而是Python版本/库版本的问题 dateutil 2.0编写为仅支持Python 3,而不支持Python 2.X。当与Python2.X一起使用时,这里的两种情况都包含bug 在第一种情况下:
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"))
如果查看\u timelex
类,它包含\u next\u
方法,这是Python3表示对象支持迭代协议的方式。在Python2.X中,方法的名称应该是next
检查Linux和Windows上的Python和库的版本是否相同。发件人:
python-dateutil-2.0.tar.gz(python>=3.0)
python-dateutil-1.5.tar.gz(python<3.0)
谢谢你的回答。我使用easy_install在Windows设备上为我安装dateutil(它已经安装在Linux设备上)。似乎它安装了错误的版本(Python 2.7上的Dateutil 2.0)。谢谢。我遇到了同样的问题,因为我非常糟糕,而且不总是使用——我的VirtualNVS中没有站点包。