このエラーが発生します'module' object has no attribute '_strptime'
ただし、複数のスレッドを使用する場合のみ。 1つだけ使用すると、問題なく動作します。 python 2.7 x64を使用しています。ここで、私が呼び出している縮小関数を使用しています
import datetime
def get_month(time):
return datetime.datetime.strptime(time, '%Y-%m-%dT%H:%M:%S+0000').strftime("%B").lower()
完全なトレースバックは次のとおりです。
AttributeError: 'module' object has no attribute '_strptime'
Exception in thread Thread-22:
Traceback (most recent call last):
File "C:\Python27x64\lib\threading.py", line 810, in __bootstrap_inner
self.run()
File "C:\Python27x64\lib\threading.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'
ちょうどこの正確な問題に遭遇しました。それはトリッキーなものです-それを追跡するのに1時間かそこらかかりました。シェルを起動して、次のコードを入力してみました。
import datetime
print(datetime.datetime.strptime("2015-4-4", "%Y-%m-%d"))
これはうまくいきました。次に、ワークスペースの空のファイルで試してみました。これにより、説明したのと同じエラーが発生しました。ワークスペースのコマンドラインから実行してみました。それでもエラーが発生しました。次に、ワークスペースからシェルを起動しました。今回は、シェル環境でエラーが発生しました。結局のところ、私がいたディレクトリ以外のディレクトリはすべて正常に機能していました。
問題は、私のプロジェクトがpythonカレンダーアプリであり、メインファイルが「calendar.py」と呼ばれていたことでした。これは一部のネイティブインポートと競合し、奇妙なエラーが発生しました。
あなたの場合、問題はあなたのファイルの名前「file.py」だと思います。それを他の何かと呼んでください、そしてあなたは行ってもいいはずです。
この問題はマルチスレッドに関連していることを確認できますが、datetime.datetime.strptime
をThreadPool
モジュールと組み合わせて使用すると時々発生します。
次のように「欠落している」モジュールをインポートすることで、スクリプトでこれを修正することができました。
import _strptime
この問題は、メーリングリストメッセージ " strptimeのスレッドバグ "で説明されています。
datetime.strptime
はPython 2のthreading
モジュールに問題があります。回避策はそこで提案されていますのようです呼び出す strptime = datetime.datetime.strptime
スレッドが開始される前。
Windowsマシン上のLinuxで動作していたスクリプトをテストしているときにこの問題が発生しましたが、スレッドの先頭にimportステートメントを追加するだけで修正できました。
def multithreadedFunction():
from datetime import datetime
# Rest of the function
おそらく、datetimeモジュールを使用しないように関数を変更する前に、これを試す価値があります。これは、機能する場合、はるかに迅速な修正であるためです。
Datetime.strptime()メソッドを使用するスレッドモジュールでも同じエラーが発生します。
https://bugs.python.org/issue798 にファイルされているように、そのメソッドはスレッドセーフな方法で_strptime.pyをインポートしません。
最後のコメントの1つは、「これはPython 2.7のみのバグであり、セキュリティの問題ではないため、問題は「修正しない」としてクローズされる可能性があります( t Python 2)または「修正済み」(視点に応じてPython 3)ですでに修正されているため)で修正します。」