【Python】TypeError: 'int' object is not subscriptable が出たとき


今日からUdemyの超人気コース『100 Days of Code - The Complete Python Pro Bootcamp』にてPythonの学習を始めました!

これからここでの学習のアウトプットとしてつまづいたところなどを中心にまとめていきます

というわけで初回は基本の基本からいきます。

使用環境

Repl.it
URL: https://repl.it/~

やっていたこと

コースの課題で
「数字を二つ入力したらそれを足し合わせた結果を返してくれる」
というプログラムを書いていました。

その課題のコードは以下になります。

▼課題

# 🚨 Don't change the code below 👇
two_digit_number = input("Type a two digit number: ")
# 🚨 Don't change the code above 👆

####################################
#Write your code below this line 👇

▼期待する結果

Type a two digit number: 63
9
>

▼自分が書いたコード


# 🚨 Don't change the code below 👇
two_digit_number = input("Type a two digit number: ")
# 🚨 Don't change the code above 👆

####################################
#Write your code below this line 👇

new_two_digit_number = int(two_digit_number)

print(new_two_digit_number[0] + new_two_gigit_number[1])

▼出力結果

Type a two digit number: 13
Traceback (most recent call last):
  File "main.py", line 10, in <module>
    print(new_two_digit_number[0] + new_two_gigit_number[1])
TypeError: 'int' object is not subscriptable


input()で返される値が必ずstr(文字列)になるのを学んでいたので、まずはintに変換するために

new_two_digit_number = int(two_digit_number)としました。

それから、そこでint化した値の最初の値と2番目の値を足し合わせるために

print(new_two_digit_number[0] + new_two_gigit_number[1])としました。

しかし、出力結果のようなエラーになりました。

エラーの原因

まずはこの

TypeError: 'int' object is not subscriptable

これが何を言っているのが調べました。

日本語に直してみると

「"int"オブジェクトは下付き文字にできません」

と言っています。

ちなみにSubscriptは「下付き文字・添え字」という意味らしいです。

どうやら、int(整数)オブジェクトに対しては[0]や[1]などの添え字をつけることができないというルールがあるみたいです。

そもそもこの[0]や[1]などの添え字はstr(文字列)に使うのであって、intには使わないようです。

整数値に対して添え字を付けているとは例えば、5[1] のようなことしているということですね。

そりゃコンピューターさんも困りますね。(ごめんね。)

解決策

これがわかったところで、どうすればいいのか考え思いつきました。

two_digit_numberがstr(文字列)のうちに配列[0][1]で取得すればいいかも!その後にそれをint(整数)化すればいけそう!」

というわけで、以下のコードを試しました。


number_1 = two_digit_number[0]
number_2 = two_digit_number[1]
result = int(number_1 + number_2)

print(result)

-- #出力結果
Type a two digit number: 63
63
>

あれ?

足されていない?? print(type(result))でdata typeを調べてもちゃんとintになっているのに?!

よくみてみると、int(number_1 + number_2)はintに変換する前に中でstr同士を足してしまっているようです。 (爪が甘かった・・・)

これはint("6" + "3") = int(63)をしていることと同じですね。

結果的にtype()で確認するとこの63はintになっていたわけです。

これが理解できたらもうゴールに近づいてきました。

number_1 = two_digit_number[0]
number_2 = two_digit_number[1]
result = int(number_1) + int(number_2)

print(result)

--
Type a two digit number: 63
9
>

きたーーー!!!嬉しいっ!!!

1つの課題で多くのことを知れました

Data typeは奥が深いですね〜〜

少しずつ身につけていきたいと思いますっ!

何か書き方や説明の仕方で不足や間違えがあればご教授いただけると幸いです


参考ソース

『Cambridge Dictionary:Subscript意味』
『文字列』