search
LoginSignup
9

More than 5 years have passed since last update.

posted at

updated at

Pythonでlistをlistという変数名で定義してしまった

この記事を書いた人について

  • 仕事ではPython以外を使っている
  • Pythonは趣味で使い始めたばかり

ハマったこと

Pythonでrangeからlistを構築する方法を確認したかったので以下のようなコードをコンソールから実行した

sample1.py
>>> list = list(range(5)) # 0から4までのリストを構築
>>> list
[0, 1, 2, 3, 4]
>>> list = list((range(10))) # 0から9までのリストを構築(できない)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'list' object is not callable

なぜか1回目のrangeからlist構築は成功し、同じことを2回行おうとしたらエラーが出た

原因

1回目で定義したリストの変数名が"list"だったため、2回目に組込型のlistのコンストラクタを呼び出す部分で1回目で定義した変数が呼び出され、型エラーが発生していた

対策

  1. 組込型と同じ変数名を使用しない
    そもそも変数名としてよくない
  2. コンソールを再起動する
    それほど複雑なことをしていなければ、変数が初期化されるのでやりなおすのもあり
  3. delで変数を削除する
    以下、この方法について紹介
sample2.py
>>> list = list(range(5)) # 0から4までのリストを構築
>>> list
[0, 1, 2, 3, 4]
>>> del list # 変数"list"を削除
>>> list # "list"が組込型のlistとして扱われている
<class 'list'>
>>> list = list((range(10))) # 0から9までのリストを構築(エラーにならない)
>>> list
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

2回目のリストの構築がエラーにならず成功していることがわかる

参考資料

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
What you can do with signing up
9