LoginSignup
11
9

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-05-28

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

  • 仕事では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回目のリストの構築がエラーにならず成功していることがわかる

参考資料

11
9
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
11
9