Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python parser.parse()给出错误;初始“U值必须是unicode或None,而不是str”;在Windows平台上_Python_Python Dateutil - Fatal编程技术网

Python parser.parse()给出错误;初始“U值必须是unicode或None,而不是str”;在Windows平台上

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服务器上可以正常工作,但在

我确信有一个非常简单的解决方案,但我对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 >>>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中没有站点包。