43

我正在使用 Python 2.7.3 中的dateutil模块。我只是想使用:

import dateutil
dateutil.parser.parse("01-02-2013")

但我得到一个错误:

AttributeError: 'module' object has no attribute 'parser'

我检查了哪些属性dateutil

print dir(dateutil)
# output: ['__author__', '__builtins__', '__doc__', '__file__', '__license__',
#          '__name__', '__package__', '__path__', '__version__']

问题是,当我尝试直接导入parserdateutil,它似乎确实存在:

from dateutil import parser
print parser.parse("01-02-2013")
# output: 2013-01-02 00:00:00

之后from dateutil import parser,parser也神奇地出现在了导入的dateutil本身中:

print dir(dateutil)
# output: ['__author__', '__builtins__', '__doc__', '__file__', '__license__',
#          '__name__', '__package__', '__path__', '__version__', 'parser',
#          'relativedelta', 'tz']

请注意,rrule此列表中仍然缺少一些其他属性(如 )。

有谁知道发生了什么?

4

1 回答 1

66

你还没有导入dateutil.parser。你可以看到它,但你必须以某种方式导入它。

>>> import dateutil.parser
>>> dateutil.parser.parse("01-02-2013")
datetime.datetime(2013, 1, 2, 0, 0)

那是因为parser.py是包中的一个模块dateutil。它是文件夹结构中的一个单独文件。

回答您在评论中提出的问题,relativedeltatz出现在您之后的命名空间中的原因from dateutil import parser是因为parser它本身导入relativedeltatz.

如果您查看 的源代码dateutil/parser.py,您可以看到导入。

# -*- coding:iso-8859-1 -*-
"""
Copyright (c) 2003-2007  Gustavo Niemeyer <gustavo@niemeyer.net>

This module offers extensions to the standard Python
datetime module.
"""
... snip ...
from . import relativedelta
from . import tz
于 2014-04-30T10:04:24.923 回答