logo

Oprava objektu „Int“ nie je možné predplatiť v Pythone

V tomto článku budeme študovať, ako opraviť objekt „int“, ktorý nie je v Pythone zapisovateľný. Predtým však pochopme, prečo sa to deje a čo to znamená.

Čo je chyba „Int“ nie je možné predpísať?

Chyba objekt „int“ nie je možné indexovať nastane, keď sa pokúsite použiť indexovanie alebo rezanie na celé číslo , typ údajov, ktorý nepodporuje tieto operácie.



Ako poznáme celé číslo v Python je a Dátový typ čo predstavuje celé číslo. Na rozdiel od zoznamov alebo slovníkov, celé čísla neobsahujú sekvenciu prvkov, a preto nepodporujú indexovanie ani delenie.
Napríklad, ak x = 42 (celé číslo) a pokúsime sa urobiť niečo ako x[0], ide o pokus o prístup k prvému prvku x, ako keby x bolo zoznam alebo a násobný . Keďže celé čísla neobsahujú kolekciu položiek, táto operácia nie je platná a dostanete TypeError: objekt „int“ nie je možné indexovať.

Príklad

Python3








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

>

>

Výkon:

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

Prečo sa vyskytla chyba „Int“ nie je možné predpísať?

Objekt „Int“ nie je zapisovateľná chyba v Pythone vzniká v dôsledku špecifických charakteristík celočíselných (int) objektov. Tu sú dôvody, prečo sa táto chyba vyskytuje:

  • Nemennosť celých čísel
  • Nesúlad typu návratu funkcie
  • Žiadna iterovateľná štruktúra

Nemennosť celých čísel

Ako vieme, že celé čísla v Pythone sú nemenné, čo znamená, že ich hodnoty nemožno po vytvorení zmeniť a operácie indexovania alebo indexovania sú použiteľné pre meniteľné sekvencie (napr. struny ), kde je možné pristupovať k prvkom alebo ich upravovať pomocou indexov.

aws červený posun

Keďže celé čísla nie sú meniteľné sekvencie, pokus o použitie hranatých zátvoriek na indexovanie výsledkov v objekte „Int“ nie je chybou indexovateľnosti.

Python3




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

>

>

Výkon:

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>

Nesúlad typu návratu funkcie

V tejto funkcii sa očakáva, že vráti zoznam alebo n-ticu, keď je podmienka False, ako to naznačuje vetva else.

Vo vetve else však funkcia vráti celé číslo namiesto zoznamu alebo n-tice, čo vedie k chybe „Int“ Objekt nie je možné predpísať

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ýkon:

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

Žiadna iterovateľná štruktúra

Ako vieme, celé čísla nemajú iterovateľnú štruktúru potrebnú na indexovanie. Iterovateľné objekty, ako sú zoznamy alebo reťazce, majú dobre definovanú postupnosť prvkov, ku ktorým je možné pristupovať pomocou indexov.

Pokus o použitie hranatých zátvoriek na celé číslo znamená, že sa s ním bude zaobchádzať, ako keby malo iterovateľné vlastnosti, čo vedie k tomu, že objekt „Int“ nie je indexovateľná chyba.

Python3

stdin v c




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

>

>

Výkon:

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“ nie je v Pythone zapisovateľný

  • Namiesto celých čísel použite reťazce alebo zoznamy
  • Skontrolujte typy premenných
  • Skontrolujte logiku kódu:

Poďme si ich podrobne preštudovať

Namiesto celých čísel použite reťazce alebo zoznamy

V Pythone je zápis dolného indexu použiteľný pre reťazce a zoznamy. Takže pred použitím dolného indexu môžeme previesť celé číslo na reťazec alebo zoznam.

Python3




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

>

>

Výkon

4>

Skontrolujte typy premenných

Musíme sa uistiť, že premenná, ktorú používame, je očakávaného typu, aký chceme. Ak to má byť sekvencia (reťazec alebo zoznam), uistite sa, že k nej nie je omylom priradená 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.'>)>

>

>

Výkon

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

Skontrolujte logiku kódu

Preskúmajte logiku svojho kódu a zistite, či je zápis dolného indexu skutočne potrebný. Ak nie, upravte kód, aby ste sa vyhli indexovaniu celých čísel.

Python3




ascii tabuľka java

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

>

>

Výkon

4>

Záver

Z vyššie uvedených informácií môžeme povedať TypeError : Objekt „int“ nie je indexovateľná chyba v Pythone sa zvyčajne vyskytuje v dôsledku nezhody typu, keď sa celé číslo omylom považuje za indexovateľný objekt, ako je zoznam alebo n-tica. Aby sme tomu zabránili, je dôležité dôsledne kontrolovať typy údajov, najmä ak ide o dynamické alebo zložité štruktúry údajov.