LoginSignup
1
3

More than 3 years have passed since last update.

【Python】importするモジュールと同名のファイルを作るとAttributeErrorになる

Last updated at Posted at 2020-04-29

ライブラリの動作確認をしようと思っただけなのに思わぬところでハマりました。

例えばjsonモジュールを試すためにjson.pyというファイルを作ったとします。

json.py
import json

obj = {
    "id" : 1,
    "name" : "hoge",
}

str = json.dumps(obj)
print(str)

問題なさそうなコードですが…。

これは、実行するとエラーになります。

$ python3 json.py
...
AttributeError: module 'json' has no attribute 'dumps'

jsonモジュールにdumpsがないって言われてます。

これは自身がjsonというファイル名なので標準モジュールより優先されて読み込まれてしまったためです。

よって、リネームしてやれば解決です。

$ mv json.py json_test.py
$ python3 json_test.py
{"id": 1, "name": "hoge"}

ちなみに自身がjsonというファイル名でなくても同ディレクトリ階層にjson.pyがいれば同じ結果になります。

また、__init__.pyが入った同名ディレクトリがいても同じ結果になります。

$ mkdir ./json
$ touch ./json/__init__.py
$ python3 json_test.py
Traceback (most recent call last):
  File "json_test.py", line 8, in <module>
    str = json.dumps(obj)
AttributeError: module 'json' has no attribute 'dumps'
1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3