logo

Python で「Int」オブジェクトを添字付けできない問題を修正

この記事では、Python で添字が付けられない「int」オブジェクトを修正する方法を学習します。しかしその前に、なぜそれが起こるのか、そしてそれが何を意味するのかを理解しましょう。

「Int」オブジェクトは添字可能ではありませんエラーとは何ですか?

エラー 「int」オブジェクトは添字付けできません インデックス作成またはスライスを使用しようとすると発生します。 整数 、これらの操作をサポートしていないデータ型です。



私たちが知っているように、整数は パイソン です データ・タイプ それは整数を表します。リストや辞書とは異なり、整数は一連の要素を保持しないため、インデックス付けやスライスはサポートされません。
たとえば、x = 42 (整数) の場合、x[0] のようなことを実行しようとすると、x が x であるかのように、x の最初の要素にアクセスしようとします。 リスト または タプル 。整数には項目のコレクションが含まれていないため、この操作は無効で、「TypeError: ‘int’ object is not subscriptable」が発生します。

Python3








# Example causing 'int' object is not subscriptable error> x>=> 42> # Attempting to use subscript notation on an integer> print>(x[>0>])>

>

>

出力:

Hangup (SIGHUP) Traceback (most recent call last):  File 'Solution.py', line 4, in   print(number[0]) TypeError: 'int' object is not subscriptable>

「Int」オブジェクトは添字可能ではありませんというエラーが発生するのはなぜですか?

Python の「Int」オブジェクトは添え字にできませんというエラーは、整数 (int) オブジェクトの特有の特性が原因で発生します。このエラーが発生する理由は次のとおりです。

  • 整数の不変性
  • 関数の戻り値の型が一致しません
  • 反復可能な構造がありません

整数の不変性

ご存知のとおり、Python の整数は不変です。つまり、作成後に値を変更することはできず、添え字やインデックス付け操作は可変シーケンス (リスト、リストなど) に適用できます。 文字列 )、インデックスを使用して要素にアクセスしたり変更したりできます。

ラウンドロビンスケジューリング

整数は変更可能なシーケンスではないため、添字に角括弧を使用しようとすると、「Int」オブジェクトは添字不可能エラーになります。

Python3




# Example triggering 'Int' object is not subscriptable error> num>=> 42> value>=> num[>0>]># Error: 'Int' object is not subscriptable>

>

>

出力:

Hangup (SIGHUP) Traceback (most recent call last):  File 'Solution.py', line 3, in   value = num[0] # Error: 'Int' object is not subscriptable TypeError: 'int' object is not subscriptable>

関数の戻り値の型が一致しません

この関数では、else 分岐で示されるように、条件が False の場合にリストまたはタプルを返すことが期待されます。

ただし、else ブランチでは、関数はリストまたはタプルではなく整数を返し、「Int」オブジェクトは添字付けできませんエラーが発生します。

Python3




def> get_data(condition):> >'''> >This function is expected to return a list or tuple,> >but under certain conditions, it returns an integer.> >'''> >if> condition:> >return> [>1>,>2>,>3>]># Returns a list> >else>:> >return> 42> # Returns an integer> > # Function call with a condition that leads to an integer being returned> result>=> get_data(>False>)> > # Attempting to index the result, which is an integer in this case> first_element>=> result[>0>]>

>

>

出力:

Hangup (SIGHUP) Traceback (most recent call last):  File 'Solution.py', line 15, in   first_element = result[0] TypeError: 'int' object is not subscriptable>

反復可能な構造がありません

ご存知のとおり、整数には添え字に必要な反復可能な構造がありません。リストや文字列などの反復可能なオブジェクトには、インデックスを使用してアクセスできる明確に定義された要素のシーケンスがあります。

整数に角括弧を使用しようとすると、その整数が反復可能なプロパティを持つかのように扱われることになり、「Int」オブジェクトは添字可能ではありませんというエラーが発生します。

Python3




# Example demonstrating misinterpretation of syntax> integer_value>=> 123> value>=> integer_value[>0>]>

10mlってどのくらいですか

>

>

出力:

Hangup (SIGHUP) Traceback (most recent call last):  File 'Solution.py', line 3, in   value = integer_value[0] # Error: 'Int' object is not subscriptable TypeError: 'int' object is not subscriptable>

「Int」オブジェクトが Python で添字付けできない問題を解決する

  • 整数の代わりに文字列またはリストを使用する
  • 変数の型を確認する
  • コードロジックを確認します。

それらを詳しく調べてみましょう

整数の代わりに文字列またはリストを使用する

Python では、添字表記は文字列とリストに適用できます。したがって、添字表記を使用する前に、整数を文字列またはリストに変換できます。

Python3




# Converting integer to string and using subscript notation> number>=> 42> number_str>=> str>(number)> print>(number_str[>0>])>

>

>

出力

4>

変数の型を確認する

使用している変数が期待どおりの型であることを確認する必要があります。シーケンス (文字列またはリスト) であるはずの場合は、誤って整数値が割り当てられていないことを確認してください。

Python3


C# チュートリアル



# Checking variable type before using subscript notation> number>=> 42> if> isinstance>(number, (>str>,>list>)):> >print>(number[>0>])> else>:> >print>(> >f>'Error: Variable type '{type(number).__name__}' is not subscriptable.'>)>

>

>

出力

Error: Variable type 'int' is not subscriptable.>

コードロジックを確認する

コードのロジックを調べて、添字表記が本当に必要かどうかを判断してください。そうでない場合は、整数に添え字を付けないようにコードを修正してください。

Python3




# Reviewing code logic to avoid subscripting integers> number>=> 42> number_str>=> str>(number)> print>(number_str[>0>])>

>

>

出力

4>

結論

上記の情報から言えることは、 タイプエラー : Python の「int」オブジェクトは添字可能ではありませんというエラーは、通常、整数が誤ってリストやタプルのような添字可能なオブジェクトとして扱われる、型の不一致が原因で発生します。したがって、これを防ぐためには、特に動的または複雑なデータ構造を扱う場合には、データ型を一貫してチェックすることが重要です。