web-dev-qa-db-ja.com

'module'オブジェクトには属性 '_strptime'がなく、いくつかのスレッドがありますPython

このエラーが発生します'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'
20
user1618465

ちょうどこの正確な問題に遭遇しました。それはトリッキーなものです-それを追跡するのに1時間かそこらかかりました。シェルを起動して、次のコードを入力してみました。

import datetime

print(datetime.datetime.strptime("2015-4-4", "%Y-%m-%d"))

これはうまくいきました。次に、ワークスペースの空のファイルで試してみました。これにより、説明したのと同じエラーが発生しました。ワークスペースのコマンドラインから実行してみました。それでもエラーが発生しました。次に、ワークスペースからシェルを起動しました。今回は、シェル環境でエラーが発生しました。結局のところ、私がいたディレクトリ以外のディレクトリはすべて正常に機能していました。

問題は、私のプロジェクトがpythonカレンダーアプリであり、メインファイルが「calendar.py」と呼ばれていたことでした。これは一部のネイティブインポートと競合し、奇妙なエラーが発生しました。

あなたの場合、問題はあなたのファイルの名前「file.py」だと思います。それを他の何かと呼んでください、そしてあなたは行ってもいいはずです。

4
thegiffman

この問題はマルチスレッドに関連していることを確認できますが、datetime.datetime.strptimeThreadPoolモジュールと組み合わせて使用​​すると時々発生します。

次のように「欠落している」モジュールをインポートすることで、スクリプトでこれを修正することができました。

import _strptime
12
chrki

この問題は、メーリングリストメッセージ " strptimeのスレッドバグ "で説明されています。

datetime.strptimeはPython 2のthreadingモジュールに問題があります。回避策はそこで提案されていますのようです呼び出す strptime = datetime.datetime.strptimeスレッドが開始される前。

10
akshan

Windowsマシン上のLinuxで動作していたスクリプトをテストしているときにこの問題が発生しましたが、スレッドの先頭にimportステートメントを追加するだけで修正できました。

def multithreadedFunction():
    from datetime import datetime
    # Rest of the function

おそらく、datetimeモジュールを使用しないように関数を変更する前に、これを試す価値があります。これは、機能する場合、はるかに迅速な修正であるためです。

1
Josh Jacobson

Datetime.strptime()メソッドを使用するスレッドモジュールでも同じエラーが発生します。

https://bugs.python.org/issue798 にファイルされているように、そのメソッドはスレッドセーフな方法で_strptime.pyをインポートしません。

最後のコメントの1つは、「これはPython 2.7のみのバグであり、セキュリティの問題ではないため、問題は「修正しない」としてクローズされる可能性があります( t Python 2)または「修正済み」(視点に応じてPython 3)ですでに修正されているため)で修正します。」

1
aritstack