Come risolvere builtin_function_or_method' object is not subscriptable
Per risolvere l'errore "'builtin_function_or_method' object is not subscriptable", assicurati di chiamare la funzione o il metodo con le parentesi tonde () invece delle parentesi quadre [].
In Python, un messaggio di errore comune è il seguente:
'builtin_function_or_method' object is not subscriptableOfferto da
Python genera questo errore quando una funzione o un metodo è seguito dalla notazione con parentesi quadre []. Tuttavia, le funzioni sono oggetti invocabili (callable). Pertanto richiedono le parentesi tonde (), talvolta chiamate anche parentesi rotonde.
Vediamo un esempio in cui Python genera questo errore:
Traceback (most recent call last):
...
TypeError: 'builtin_function_or_method' object is not subscriptableOfferto da
La sezione seguente approfondisce questo errore.
Comprendere l'errore
Le funzioni in Python sono oggetti invocabili, il che significa che possiamo usare le parentesi tonde dopo il nome della funzione per eseguire il codice definito nella funzione. Uno degli esempi più comuni di funzione built-in in Python è print():
Traceback (most recent call last):
...
TypeError: 'builtin_function_or_method' object is not subscriptableOfferto da
Scomponiamo il messaggio d'errore nei suoi elementi chiave:
Un oggetto 'builtin_function_or_method'
Non indicizzabile (not subscriptable)
Nell'esempio sopra, print() è una funzione built-in. La descrizione fa riferimento anche ai metodi, che sono funzioni parte di una classe. Python ha molti metodi built-in associati ai suoi tipi di dato. Vediamo un altro esempio che genera questo messaggio di errore:
Questo scenario è simile all'esempio nell'introduzione, che contiene il metodo delle liste .append(). Ecco la versione corretta con le parentesi tonde:
numbers =[2,4,6,8]
numbers.append(10)print(numbers)Offerto da
Python genera un errore simile con le funzioni definite dall'utente:
defgreet_person(name):print(f"Hello {person}")
greet_person["James"]Offerto da
Traceback (most recent call last):
...
TypeError: 'function' object is not subscriptableOfferto da
Tuttavia, la funzione greet_person() non è una delle funzioni built-in di Python. Il messaggio d'errore indica che si tratta di una 'function' e non di una 'builtin_function_or_method'.
La seconda parte del messaggio d'errore si riferisce al termine 'subscriptable'. Un oggetto Python è indicizzabile (subscriptable) se possiamo usare le parentesi quadre per accedere a uno dei suoi elementi. Un esempio comune di oggetto subscriptable è unasequenza, che può essere indicizzata usando le parentesi quadre:
print(numbers[0])print(numbers[-1])print(numbers[1:4])Offerto da
Le chiavi del dizionario si usano al posto degli indici all'interno delle parentesi quadre.
Python: invocabile vs. indicizzabile
Le sequenze e le mappature sono esempi di oggetti Python indicizzabili. Possiamo usare le parentesi quadre dopo il nome dell'oggetto per accedere a un elemento all'interno della struttura dati. Una classe Python crea oggetti indicizzabili se definisce il metodo speciale .__getitem__().
Le funzioni e i metodi sono esempi di oggetti invocabili. Possiamo usare le parentesi tonde dopo il nome dell'oggetto per chiamarli. Chiamare una funzione o un metodo esegue il codice definito nella funzione.
Le classi sono un altro oggetto Python invocabile. Chiamare una classe crea un'istanza. In generale, un oggetto Python è invocabile se la sua classe definisce il metodo speciale .__call__().
Python genera un messaggio d'errore simile quando proviamo a chiamare un oggetto che non è invocabile:
Traceback (most recent call last):
...
TypeError: 'list' object is not callableOfferto da
La variabile numbers è una lista, che non è invocabile. Il modo corretto per accedere al primo elemento della lista è usare le parentesi quadre: numbers[0]. Funzioni, metodi e classi sono gli oggetti invocabili più comuni in Python.
Correggere 'builtin_function_or_method' object is not subscriptable`
Python genera il messaggio di errore ``'builtin_function_or_method' object is not subscriptable` quando una funzione o un metodo è seguito da parentesi quadre. Fai attenzione alle parentesi quadre subito dopo il nome della funzione o del metodo e sostituiscile con le parentesi tonde.
In alcuni casi, una funzione o un metodo ha come argomento una lista, definita con parentesi quadre. Tuttavia, nota che la lista è definita all'interno delle parentesi tonde:
number_of_values =len([10,30,50])print(number_of_values)
numbers =[2,4,6,8]
numbers.extend([10,12])print(numbers)Offerto da
In questi esempi, il nome della funzione o del metodo è seguito da parentesi tonde. L'argomento tra le parentesi è una lista. La notazione con parentesi quadre per definire una lista è diversa dalla notazione con parentesi quadre usata con sequenze, mappature e altri oggetti indicizzabili.
Consigli per il debug
Una cosa che puoi fare è verificare il tipo dell'oggetto usando la funzione built-in type():
print(type(print))
numbers =[2,4,6,8]print(type(numbers.append))Offerto da
L'output conferma che l'oggetto è una funzione o un metodo built-in, quindi è invocabile. Esiste anche una funzione built-in chiamata callable() che restituisce True se il suo argomento può essere chiamato:
Controlla il tipo di parentesi. Gli oggetti invocabili, come funzioni e metodi, devono essere seguiti da parentesi tonde. Le parentesi quadre si usano per sequenze, mappature e altri oggetti indicizzabili.
Cerca indizi nel messaggio d'errore che facciano riferimento a funzioni o metodi built-in e a oggetti indicizzabili. Il numero di riga nel messaggio d'errore punta alla riga che contiene l'errore.
Conclusione
I linguaggi di programmazione come Python usano segni diversi per scopi distinti. Le parentesi quadre si usano subito dopo il nome di un oggetto per accedere a un elemento della struttura dati. Questa notazione con parentesi quadre funziona su oggetti indicizzabili. Le parentesi quadre si usano anche per creare liste quando non seguono immediatamente il nome di un oggetto.
Le parentesi tonde si usano dopo il nome di un oggetto per chiamarlo. Le funzioni e i metodi sono esempi di oggetti invocabili in Python. Le parentesi tonde sono associate anche alle tuple in Python e si usano per raggruppare parti di un'istruzione quando necessario.
Python solleva l'eccezione 'builtin_function_or_method' object is not subscriptable quando una funzione o un metodo built-in è seguito da parentesi quadre. Il modo corretto per chiamare una funzione o un metodo è usare le parentesi tonde.
Ho studiato Fisica e Matematica a livello UG presso l’Università di Malta. Poi mi sono trasferito a Londra e ho conseguito il dottorato in Fisica all’Imperial College. Ho lavorato su nuove tecniche ottiche per immagini della retina umana. Ora mi concentro sullo scrivere di Python, comunicare su Python e insegnare Python.
Scopri i 15 migliori server MCP remoti che stanno trasformando lo sviluppo AI nel 2026. Scopri come migliorano automazione, ragionamento, sicurezza e velocità dei workflow.
In Python, un messaggio di errore comune è il seguente:
Python genera questo errore quando una funzione o un metodo è seguito dalla notazione con parentesi quadre
[]. Tuttavia, le funzioni sono oggetti invocabili (callable). Pertanto richiedono le parentesi tonde(), talvolta chiamate anche parentesi rotonde.Vediamo un esempio in cui Python genera questo errore:
La sezione seguente approfondisce questo errore.
Comprendere l'errore
Le funzioni in Python sono oggetti invocabili, il che significa che possiamo usare le parentesi tonde dopo il nome della funzione per eseguire il codice definito nella funzione. Uno degli esempi più comuni di funzione built-in in Python è
print():Le parentesi tonde si usano per chiamare una funzione in Python. Usare invece le parentesi quadre genera un errore:
Scomponiamo il messaggio d'errore nei suoi elementi chiave:
Nell'esempio sopra,
print()è una funzione built-in. La descrizione fa riferimento anche ai metodi, che sono funzioni parte di una classe. Python ha molti metodi built-in associati ai suoi tipi di dato. Vediamo un altro esempio che genera questo messaggio di errore:Il metodo
.count(), come le funzioni in generale, richiede le parentesi tonde:Questo scenario è simile all'esempio nell'introduzione, che contiene il metodo delle liste
.append(). Ecco la versione corretta con le parentesi tonde:TypeError: 'function' object is not subscriptable
Python genera un errore simile con le funzioni definite dall'utente:
Tuttavia, la funzione
greet_person()non è una delle funzioni built-in di Python. Il messaggio d'errore indica che si tratta di una 'function' e non di una 'builtin_function_or_method'.La seconda parte del messaggio d'errore si riferisce al termine 'subscriptable'. Un oggetto Python è indicizzabile (subscriptable) se possiamo usare le parentesi quadre per accedere a uno dei suoi elementi. Un esempio comune di oggetto subscriptable è una sequenza, che può essere indicizzata usando le parentesi quadre:
Le tuple e le stringhe sono altri esempi di sequenze. Pertanto, sono anch'esse indicizzabili:
Le mappature in Python sono anch'esse indicizzabili. La mappatura più comune in Python è il dizionario:
Le chiavi del dizionario si usano al posto degli indici all'interno delle parentesi quadre.
Python: invocabile vs. indicizzabile
Le sequenze e le mappature sono esempi di oggetti Python indicizzabili. Possiamo usare le parentesi quadre dopo il nome dell'oggetto per accedere a un elemento all'interno della struttura dati. Una classe Python crea oggetti indicizzabili se definisce il metodo speciale
.__getitem__().Le funzioni e i metodi sono esempi di oggetti invocabili. Possiamo usare le parentesi tonde dopo il nome dell'oggetto per chiamarli. Chiamare una funzione o un metodo esegue il codice definito nella funzione.
Le classi sono un altro oggetto Python invocabile. Chiamare una classe crea un'istanza. In generale, un oggetto Python è invocabile se la sua classe definisce il metodo speciale
.__call__().Python genera un messaggio d'errore simile quando proviamo a chiamare un oggetto che non è invocabile:
La variabile
numbersè una lista, che non è invocabile. Il modo corretto per accedere al primo elemento della lista è usare le parentesi quadre:numbers[0]. Funzioni, metodi e classi sono gli oggetti invocabili più comuni in Python.Correggere 'builtin_function_or_method' object is not subscriptable`
Python genera il messaggio di errore ``'builtin_function_or_method' object is not subscriptable` quando una funzione o un metodo è seguito da parentesi quadre. Fai attenzione alle parentesi quadre subito dopo il nome della funzione o del metodo e sostituiscile con le parentesi tonde.
In alcuni casi, una funzione o un metodo ha come argomento una lista, definita con parentesi quadre. Tuttavia, nota che la lista è definita all'interno delle parentesi tonde:
In questi esempi, il nome della funzione o del metodo è seguito da parentesi tonde. L'argomento tra le parentesi è una lista. La notazione con parentesi quadre per definire una lista è diversa dalla notazione con parentesi quadre usata con sequenze, mappature e altri oggetti indicizzabili.
Consigli per il debug
Una cosa che puoi fare è verificare il tipo dell'oggetto usando la funzione built-in
type():L'output conferma che l'oggetto è una funzione o un metodo built-in, quindi è invocabile. Esiste anche una funzione built-in chiamata
callable()che restituisceTruese il suo argomento può essere chiamato:Altri suggerimenti di debug da considerare:
Conclusione
I linguaggi di programmazione come Python usano segni diversi per scopi distinti. Le parentesi quadre si usano subito dopo il nome di un oggetto per accedere a un elemento della struttura dati. Questa notazione con parentesi quadre funziona su oggetti indicizzabili. Le parentesi quadre si usano anche per creare liste quando non seguono immediatamente il nome di un oggetto.
Le parentesi tonde si usano dopo il nome di un oggetto per chiamarlo. Le funzioni e i metodi sono esempi di oggetti invocabili in Python. Le parentesi tonde sono associate anche alle tuple in Python e si usano per raggruppare parti di un'istruzione quando necessario.
Python solleva l'eccezione
'builtin_function_or_method' object is not subscriptablequando una funzione o un metodo built-in è seguito da parentesi quadre. Il modo corretto per chiamare una funzione o un metodo è usare le parentesi tonde.Puoi approfondire le funzioni nell'articolo di DataCamp Python Functions: How to Call & Write Functions.