Vai al contenuto principale

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 [].
Aggiornato 29 set 2026  · 6 min leggi

Scopri con l'IA

ChatGPTClaudePerplexity

In Python, un messaggio di errore comune è il seguente:

'builtin_function_or_method' object is not subscriptable

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:

numbers = [2, 4, 6, 8]
numbers.append[10]
Traceback (most recent call last):
  ...
TypeError: 'builtin_function_or_method' object is not subscriptable

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():

print("This is a built-in function")
This is a built-in function

Le parentesi tonde si usano per chiamare una funzione in Python. Usare invece le parentesi quadre genera un errore:

print["This is a built-in function"]
Traceback (most recent call last):
  ...
TypeError: 'builtin_function_or_method' object is not subscriptable

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:

name = "DataCamp"
print(name.count["a"])
Traceback (most recent call last):
  ...
TypeError: 'builtin_function_or_method' object is not subscriptable

Il metodo .count(), come le funzioni in generale, richiede le parentesi tonde:

print(name.count("a"))
3

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)
[2, 4, 6, 8, 10]

TypeError: 'function' object is not subscriptable

Python genera un errore simile con le funzioni definite dall'utente:

def greet_person(name):
    print(f"Hello {person}")
   
greet_person["James"]
Traceback (most recent call last):
  ...
TypeError: 'function' object is not subscriptable

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:

print(numbers[0])
print(numbers[-1])
print(numbers[1:4])
2
10
[4, 6, 8]

Le tuple e le stringhe sono altri esempi di sequenze. Pertanto, sono anch'esse indicizzabili:

more_numbers = 10, 30, 50
print(more_numbers[0])
name = "DataCamp"
print(name[0])
10
'D'

Le mappature in Python sono anch'esse indicizzabili. La mappatura più comune in Python è il dizionario:

points = {"James": 10, "Mary": 14}
print(points["Mary"])
14

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:

numbers = [2, 4, 6, 8]
print(numbers(0))
Traceback (most recent call last):
  ...
TypeError: 'list' object is not callable

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)
3
[2, 4, 6, 8, 10, 12]

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))
<class 'builtin_function_or_method'>

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:

print(callable(numbers.append))
True

Altri suggerimenti di debug da considerare:

  • 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.

Puoi approfondire le funzioni nell'articolo di DataCamp Python Functions: How to Call & Write Functions.


Stephen Gruppetta's photo
Author
Stephen Gruppetta
LinkedIn
Twitter

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.

Argomenti
Python

Impara Python con questi corsi!

{count, plural, one {Corso} other {Corsi}}

Introduzione a Python

{hours} ore
7.1M
Impara le basi dell’analisi dei dati con Python in sole 4 ore. Questo corso online ti introduce all’interfaccia di Python e ai pacchetti più usati.
Vedi i dettagliRight Arrow
Inizia Il Corso
Mostra altroRight Arrow
Correlato

{count, plural, one {blog} other {blogs}}

Tokenizzazione nel NLP: come funziona, sfide e casi d'uso

Guida al preprocessing NLP nel machine learning. Copriamo spaCy, i transformer di Hugging Face e come funziona la tokenizzazione in casi d'uso reali.
Abid Ali Awan's photo

Abid Ali Awan

10 min

{count, plural, one {blog} other {blogs}}

I 15 migliori server MCP remoti che ogni AI builder dovrebbe conoscere nel 2026

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.
Abid Ali Awan's photo

Abid Ali Awan

15 min

{count, plural, one {blog} other {blogs}}

Che cos'è Snowflake? Guida per principianti alla piattaforma dati cloud

Esplora le basi di Snowflake, la piattaforma dati cloud. Scopri la sua architettura, le sue funzionalità e come integrarla nelle tue pipeline di dati.
Tim Lu's photo

Tim Lu

12 min

Mostra AltroMostra Altro