V tomto článku se podíváme na to, jak opravit objekt „int“, který nelze v Pythonu přepsat. Předtím si ale uvědomme, proč k tomu dochází a co to znamená.
Co je chyba objektu „Int“ není podřízená?
Chyba Objekt „int“ nelze indexovat nastane, když se pokusíte použít indexování nebo dělení na celé číslo , datový typ, který tyto operace nepodporuje.
Jak známe celé číslo v Krajta je datový typ což představuje celé číslo. Na rozdíl od seznamů nebo slovníků celá čísla neobsahují posloupnost prvků, a proto nepodporují indexování ani dělení.
Pokud například x = 42 (celé číslo) a pokusíme se udělat něco jako x[0], je to pokus o přístup k prvnímu prvku x, jako by x bylo seznam nebo a tuple . Vzhledem k tomu, že celá čísla neobsahují kolekci položek, tato operace není platná a dostanete TypeError: objekt „int“ nelze indexovat.
Příklad
Python3
# Example causing 'int' object is not subscriptable error> x>=> 42> # Attempting to use subscript notation on an integer> print>(x[>0>])> |
>
>
Výstup:
Hangup (SIGHUP) Traceback (most recent call last): File 'Solution.py', line 4, in print(number[0]) TypeError: 'int' object is not subscriptable>
Proč se neobjevuje chyba „Int“ objekt není registrovatelný?
Objekt ‚Int‘ není indexovatelná chyba v Pythonu vzniká kvůli specifickým vlastnostem celočíselných (int) objektů. Zde jsou důvody, proč k této chybě dochází:
- Neměnnost celých čísel
- Neshoda typu návratu funkce
- Žádná iterovatelná struktura
Neměnnost celých čísel
Jak víme, že celá čísla v Pythonu jsou neměnná, což znamená, že jejich hodnoty nelze po vytvoření změnit a operace indexování nebo indexování jsou použitelné pro proměnlivé sekvence (např. struny ), kde lze k prvkům přistupovat nebo je upravovat pomocí indexů.
cast sql
Vzhledem k tomu, že celá čísla nejsou měnitelné sekvence, není pokus o použití hranatých závorek pro indexování výsledků v objektu ‚Int‘ indexovatelnou chybou.
Python3
# Example triggering 'Int' object is not subscriptable error> num>=> 42> value>=> num[>0>]># Error: 'Int' object is not subscriptable> |
>
>
Výstup:
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>
Neshoda typu návratu funkce
V této funkci se očekává, že vrátí seznam nebo n-tici, když je podmínka False, jak naznačuje větev else.
Ve větvi else však funkce vrací celé číslo namísto seznamu nebo n-tice, což má za následek chybu ‚Int‘ Object Is Not Subscriptable
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>]> |
>
>
Výstup:
Hangup (SIGHUP) Traceback (most recent call last): File 'Solution.py', line 15, in first_element = result[0] TypeError: 'int' object is not subscriptable>
Žádná iterovatelná struktura
Jak víme, celá čísla postrádají iterovatelnou strukturu potřebnou pro indexování. Iterovatelné objekty, jako jsou seznamy nebo řetězce, mají dobře definovanou sekvenci prvků, ke kterým lze přistupovat pomocí indexů.
Pokus o použití hranatých závorek na celé číslo znamená, že se s ním zachází, jako by mělo iterovatelné vlastnosti, což má za následek, že objekt „Int“ není indexovatelná chyba.
Python3
# Example demonstrating misinterpretation of syntax> integer_value>=> 123> value>=> integer_value[>0>]> |
>
>
Výstup:
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>
Objekt Solve ‚Int‘ nelze v Pythonu předplatit
- Místo celých čísel použijte řetězce nebo seznamy
- Zkontrolujte typy proměnných
- Zkontrolovat logiku kódu:
Pojďme si je podrobně prostudovat
Místo celých čísel použijte řetězce nebo seznamy
V Pythonu je zápis dolního indexu použitelný pro řetězce a seznamy. Takže můžeme před použitím dolního indexu převést celé číslo na řetězec nebo seznam.
Python3
imessage hry na android
# Converting integer to string and using subscript notation> number>=> 42> number_str>=> str>(number)> print>(number_str[>0>])> |
>
>Výstup
4>
Zkontrolujte typy proměnných
Musíme se ujistit, že proměnná, kterou používáme, je očekávaného typu, jaký ji chceme mít. Pokud to má být sekvence (řetězec nebo seznam), ujistěte se, že jí není omylem přiřazena celočíselná hodnota.
Python3
# 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.'>)> |
>
přizpůsobená výjimka v jazyce Java
>Výstup
Error: Variable type 'int' is not subscriptable.>
Zkontrolujte logiku kódu
Prozkoumejte logiku svého kódu a určete, zda je zápis dolního indexu skutečně nezbytný. Pokud ne, upravte kód, abyste se vyhnuli indexování celých čísel.
Python3
# Reviewing code logic to avoid subscripting integers> number>=> 42> number_str>=> str>(number)> print>(number_str[>0>])> |
>
>Výstup
4>
Závěr
Z výše uvedených informací můžeme říci TypeError : Objekt „int“ není indexovatelný chyba v Pythonu obvykle nastává kvůli neshodě typu, kdy je celé číslo mylně považováno za indexovatelný objekt, jako je seznam nebo n-tice. Abychom tomu zabránili, je důležité důsledně kontrolovat datové typy, zejména při práci s dynamickými nebo složitými datovými strukturami.