ライブラリの動作確認をしようと思っただけなのに思わぬところでハマりました。
例えば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'