2
1

More than 3 years have passed since last update.

Pythonでlist型をlen()しようとしたら "TypeError: 'int' object is not callable"が出た話

Last updated at Posted at 2020-08-05

Google Colabolatoryでデータを色々いじってグラフ書いたりしてたら、表題の様な事が起こりました。少しハマりましたが、原因は簡単でした。
もともとリスト型に入っている文字列の数を数えてその数を棒グラフにしたかったんですが、棒グラフのラベルを作るために以下のようなソースを実行しました。

datalabels=[]
for data in datalist:
  if data not in datalabels:
    datalabels.append(data)
print(len(datalabels))

すると、

TypeError                                 Traceback (most recent call last)
<ipython-input-9-e9369466b8b1> in <module>()
      5   if data not in datalabels:
      6     datalabels.append(data)
----> 7 print(len(datalabels))
      8 print(len)
      9 

TypeError: 'int' object is not callable

が発生。ググるとビルトイン関数と同じ名前の変数名を使うとこれが起きるとのこと。datalabelsなんてビルトイン関数聞いたことないぞ!と憤っていたらよく見たら別のブロックでlenを使ってた。

なるほどな。lenは無警戒だったけど、そっちで出るのか。ひとつ勉強になりました。

lenという変数を急遽 _len に変えて再実行。
ふう、これでうまくいく。

と思ったらまだ同じエラーが出るじゃないか!!!なんだと!!!!

そうか。google colabolatoryだからランタイムをリセットしないと一度作った変数はソース上削除しても保持されるのか。多分jupyterでも同じこと起きるやつだ。

というわけでランタイムリセットして上からやり直したら無事成功。
一件落着。

2
1
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
  3. You can use dark theme
What you can do with signing up
2
1