"random.py", "test.py"などのファイル名を付けるとハマる


このエントリーをはてなブックマークに追加

Pythonのrandom.choiceを試してみようと、以下のようなrandom.pyを作成し、実行しました。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import random
print(random.choice(["a", "b", "c"]))

しかし、以下のようなエラーが出て実行できませんでした。

$ ./random.py
Traceback (most recent call last):
  File "./random.py", line 4, in <module>
    import random
  File "/home/(ユーザ名)/python_tmp/random.py", line 6, in <module>
    print(random.choice(["a", "b", "c"]))  # choice(): 配列の要素のどれか一つを選んで返す関数
AttributeError: 'module' object has no attribute 'choice'

このエラーの原因は、今作ったrandom.pyという名前が、Pythonの標準モジュールであるrandomと衝突してしまったことにあります。random.pyrandom_test.pyなどの他の名前にリネームすることでこの問題を解決できます。

同様に、test.pyという名前のファイルでも嫌なエラーが起こります(参考:[python] 細かすぎて伝わりにくい、Pythonの本当の落とし穴10選 | 私の小岩ホッチキス)。