Python : 「unsubscriptable object」 エラーについて
 2007.07.27

Pythonで良く見かける「unsusbscriptable object」エラーとは… subscript という英単語を辞書で引くと
プログラムで配列要素を指定するために用いられる記号《集合の要素につける番号》
という意味がありました. あるオブジェクトをlistオブジェクトとみなして”[]”演算子(?)を使って要素を取出そうとした.だけど,あるオブジェクトはlistオブジェクトじゃないのでTypeErrorになる.つまり,Pythonの unsubscriptable object は「番号によって要素指定できないオブジェクトだよ」という意味ですね.
>>> x = None; x[2]
Traceback (most recent call last):
  File "", line 1, in ?
TypeError: unsubscriptable object
>>> x = 10; x[2]
Traceback (most recent call last):
  File "", line 1, in ?
TypeError: unsubscriptable object
>>> x = {}; x[2]
Traceback (most recent call last):
  File "", line 1, in ?
KeyError: 2
私の経験上 None に対して”[]”を使っている場合が多いんじゃないでしょうか.もちろんこの例のように,自明な場合のエラーなら簡単に探せますが,プログラム中で予想外のタイミングで変数にNoneが割当てられていることはあります. もちろん,「予想外」なのはプログラミングした者にとって予想外という意味で,プログラムは書いてあるとおり動くだけですけどね.
カテゴリー:python&zope