web-dev-qa-db-fra.com

AttributeError lors de l'utilisation de "import dateutil" et "dateutil.parser.parse ()" mais aucun problème lors de l'utilisation de "from dateutil import parser"

Je jouais avec le module dateutil in Python 2.7.3. Je voulais simplement utiliser:

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

Mais j'ai une erreur:

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

J'ai vérifié quels attributs dateutil possède :

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

Le fait est que lorsque j'essaie d'importer parser de dateutil directement, cela semble exister:

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

Après le from dateutil import parser, parser est également apparu comme par magie dans le dateutil importé lui-même:

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

Notez que certains autres attributs (comme rrule) manquent toujours dans cette liste.

Quelqu'un sait ce qui se passe?

36

Vous n'avez pas importé dateutil.parser. Vous pouvez le voir, mais vous avez pour l'importer d'une manière ou d'une autre.

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

C'est parce que le parser.py est un module du package dateutil. Il s'agit d'un fichier distinct dans la structure des dossiers.

Répondez à la question que vous avez posée dans les commentaires, la raison pour laquelle relativedelta et tz apparaissent dans l'espace de noms après avoir from dateutil import parser est parce que parser lui-même importe relativedelta et tz.

Si vous regardez le code source de dateutil/parser.py, vous pouvez voir les importations.

# -*- coding:iso-8859-1 -*-
"""
Copyright (c) 2003-2007  Gustavo Niemeyer <[email protected]>

This module offers extensions to the standard Python
datetime module.
"""
... snip ...
from . import relativedelta
from . import tz
57
msvalkon