l'objet 'module' n'a pas d'attribut 'strptime' avec plusieurs threads Python
je reçois cette erreur 'module' object has no attribute '_strptime'
mais seulement quand j'utilise plusieurs threads. Quand je n'en utilise qu'un, ça marche très bien. Im en utilisant python 2.7 x64. Ici, nous avons la fonction réduite que j'appelle
import datetime
def get_month(time):
return datetime.datetime.strptime(time, '%Y-%m-%dT%H:%M:%S+0000').strftime("%B").lower()
voici le traceback complet:
AttributeError: 'module' object has no attribute '_strptime'
Exception in thread Thread-22:
Traceback (most recent call last):
File "C:Python27x64libthreading.py", line 810, in __bootstrap_inner
self.run()
File "C:Python27x64libthreading.py", line 763, in run
self.__target(*self.__args, **self.__kwargs)
File "C:file.py", line 81, in main
month=get_month(eventtime)
File "C:file.py", line 62, in get_month
return datetime.datetime.strptime(time, '%Y-%m-%dT%H:%M:%S+0000').strftime("%B").lower()
AttributeError: 'module' object has no attribute '_strptime'
4 réponses
je viens de rencontrer ce problème précis. C'est une question difficile - m'a pris une heure pour le retrouver. J'ai essayé de lancer le shell et en entrant le code suivant:
import datetime
print(datetime.datetime.strptime("2015-4-4", "%Y-%m-%d"))
cela a bien fonctionné. Puis je l'ai essayé dans un fichier vide dans mon espace de travail. Cela a donné la même erreur que vous avez décrit. J'ai essayé de l'exécuter depuis la ligne de commande dans mon espace de travail. Lui a toujours donné l'erreur. J'ai ensuite lancé le shell depuis mon espace de travail. Cette fois, il a donné l'erreur dans l'environnement du shell. Comme il s'est avéré, n'importe quel répertoire autre que celui dans lequel j'étais fonctionnait très bien.
le problème était que mon projet était une application de calendrier python, et mon fichier principal s'appelait "calendar.py". Cela entrait en conflit avec une certaine importation native, créant ainsi l'erreur bizarre.
dans votre cas, je parierais n'importe quoi le problème est le nom de votre dossier: "file.py". Appelez ça autrement, et vous devriez être prêt à partir.
Le problème est décrit dans une liste de diffusion de message "filetage bug dans strptime".
datetime.strptime
a un problème avec Python 2 threading
module. La solution de contournement a suggéré il y a semble pour être à invoquer strptime = datetime.datetime.strptime
avant le démarrage des threads.
je peux confirmer que le problème est lié à la multithreading, et il m'arrive de temps en temps quand j'utilise datetime.datetime.strptime
en combinaison avec l' ThreadPool
module.
j'ai pu corriger cela dans mon script en important le module "manquant" comme suit:
import _strptime
j'ai rencontré ce problème en testant un script qui travaillait sur Linux sur une machine Windows, et j'ai pu le corriger en ajoutant simplement une déclaration d'importation au haut du thread.
def multithreadedFunction():
from datetime import datetime
# Rest of the function
cela vaut probablement la peine d'essayer avant de modifier votre fonction pour ne pas utiliser le module datetime, puisque c'est une correction beaucoup plus rapide si cela fonctionne.