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でも同じこと起きるやつだ。
というわけでランタイムリセットして上からやり直したら無事成功。
一件落着。