>> import dateut-6ren">
gpt4 book ai didi

python - dateutil.parser.parse() 在 Windows 平台上给出错误 "initial_value must be unicode or None, not str"

转载 作者:太空狗 更新时间:2023-10-29 22:08:22 27 4
gpt4 key购买 nike

我确信有一个非常简单的解决方案,但我对 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 机器。

最佳答案

这不是 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 指示对象支持迭代协议(protocol)的方式。在 Python 2.X 中,方法的名称应该是 next

检查您在 Linux 和 Windows 上是否拥有相同版本的 Python 和库。来自 project website :

python-dateutil-2.0.tar.gz (Python >= 3.0)

python-dateutil-1.5.tar.gz (Python < 3.0)

关于python - dateutil.parser.parse() 在 Windows 平台上给出错误 "initial_value must be unicode or None, not str",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7804505/

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