builtin_function_or_method' nesnesi subscriptable değil hatası nasıl düzeltilir
"'builtin_function_or_method' object is not subscriptable" hatasını düzeltmek için, fonksiyonu veya yöntemi köşeli parantezler [] yerine parantezlerle () çağırdığınızdan emin olun.
'builtin_function_or_method' object is not subscriptableAltyapı:
Python, bir fonksiyon veya yöntemin hemen ardından köşeli parantez [] gösterimi geldiğinde bu hatayı verir. Oysa fonksiyonlar çağrılabilir (callable) nesnelerdir. Bu nedenle parantez () gerektirirler; kimi zaman yuvarlak parantez de denir.
Traceback (most recent call last):
...
TypeError: 'builtin_function_or_method' object is not subscriptableAltyapı:
Aşağıdaki bölüm bu hatayı daha ayrıntılı inceler.
Hatanın Anlaşılması
Python fonksiyonları çağrılabilir nesnelerdir; bu da fonksiyon adından sonra parantez kullanarak, fonksiyon tanımındaki kodu çalıştırabileceğimiz anlamına gelir. Python'daki yerleşik fonksiyonlara en bilinen örneklerden biri print()'tir:
Traceback (most recent call last):
...
TypeError: 'builtin_function_or_method' object is not subscriptableAltyapı:
Hata mesajını temel parçalarına ayıralım:
Bir 'builtin_function_or_method' nesnesi
Subscriptable değil
Yukarıdaki örnekte, print() bir yerleşik fonksiyondur. Açıklama yöntemleri de kapsar; yöntemler, bir sınıfın parçası olan fonksiyonlardır. Python'ın veri tipleriyle ilişkili pek çok yerleşik yöntemi vardır. Bu hata mesajını üreten bir başka örneğe bakalım:
Traceback (most recent call last):
...
TypeError: 'function' object is not subscriptableAltyapı:
Ancak, greet_person() fonksiyonu Python'daki yerleşik fonksiyonlardan biri değildir. Hata mesajı bunun 'builtin_function_or_method' değil, bir 'function' olduğunu belirtir.
Hata mesajının ikinci bölümü 'subscriptable' terimine atıf yapar. Bir Python nesnesi, köşeli parantez kullanarak öğelerinden birine erişebiliyorsak subscriptable kabul edilir. Subscriptable bir nesneye yaygın bir örnek, köşeli parantezle indekslenebilen birdizidir (sequence):
Sözlüklerde köşeli parantez içinde indeks yerine anahtarlar kullanılır.
Python: Callable vs. Subscriptable
Diziler ve eşleştirmeler, subscriptable Python nesnelerine örnektir. Veri yapısının içindeki bir nesneye erişmek için nesne adının ardından köşeli parantez kullanabiliriz. Bir Python sınıfı, .__getitem__() özel yöntemini tanımlıyorsa subscriptable nesneler oluşturur.
Fonksiyonlar ve yöntemler, çağrılabilir nesnelere örnektir. Nesne adının ardından parantez kullanarak onları çağırabiliriz. Bir fonksiyon ya da yöntemi çağırmak, fonksiyon tanımındaki kodu çalıştırır.
Sınıflar da başka bir çağrılabilir Python nesnesidir. Bir sınıfı çağırmak bir örnek (instance) oluşturur. Genel olarak, bir Python nesnesi, sınıfı .__call__() özel yöntemini tanımlıyorsa çağrılabilir kabul edilir.
Çağrılamayan bir nesneyi çağırmaya çalıştığımızda Python benzer bir hata mesajı verir:
Traceback (most recent call last):
...
TypeError: 'list' object is not callableAltyapı:
numbers değişkeni bir listedir ve çağrılabilir değildir. Listeden ilk öğeye erişmenin doğru yolu köşeli parantez kullanmaktır: numbers[0]. Python'da en yaygın çağrılabilir nesneler fonksiyonlar, yöntemler ve sınıflardır.
'builtin_function_or_method' object is not subscriptable Hatasını Düzeltme
Python, bir fonksiyon veya yöntemin hemen ardından köşeli parantez geldiğinde ``'builtin_function_or_method' object is not subscriptable` hata mesajını verir. Fonksiyon veya yöntem adının hemen ardından gelen köşeli parantezlere dikkat edin ve bunları parantezlerle değiştirin.
Bazı durumlarda, bir fonksiyon veya yöntem argüman olarak köşeli parantezlerle tanımlanan bir liste alır. Ancak, listenin parantezlerin içinde tanımlandığına dikkat edin:
Bu örneklerde, fonksiyon veya yöntem adını parantezler izler. Parantezlerin içindeki argüman bir listedir. Liste tanımlamak için kullanılan köşeli parantez gösterimi, diziler, eşleştirmeler ve diğer subscriptable nesnelerle kullanılan köşeli parantez gösteriminden farklıdır.
Hata Ayıklama İpuçları
Yapabileceğiniz şeylerden biri, yerleşik type() fonksiyonunu kullanarak nesne türünü kontrol etmektir:
Çıktı, nesnenin çağrılabilir bir yerleşik fonksiyon veya yöntem olduğunu doğrular. Ayrıca, argümanı çağrılabilir ise True döndüren callable() adlı bir yerleşik fonksiyon da vardır:
Dikkate alabileceğiniz diğer hata ayıklama ipuçları:
Parantez veya köşeli parantez türünü kontrol edin. Fonksiyonlar ve yöntemler gibi çağrılabilirler parantezle takip edilmelidir. Köşeli parantezler; diziler, eşleştirmeler ve diğer subscriptable nesneler için kullanılır.
Hata mesajındaki yerleşik fonksiyonlara veya yöntemlere ve subscriptable nesnelere yapılan atıflardan ipuçları arayın. Hata mesajlarındaki satır numarası, hatanın bulunduğu satırı gösterir.
Sonuç
Python gibi programlama dilleri, farklı amaçlar için farklı işaretler kullanır. Bir veri yapısındaki öğeye erişmek için nesne adının hemen ardından köşeli parantez kullanılır. Bu köşeli parantez gösterimi, subscriptable nesnelerde çalışır. Köşeli parantezler, bir nesne adını hemen takip etmediklerinde liste oluşturmak için de kullanılır.
Parantezler ise bir nesne adının ardından nesneyi çağırmak için kullanılır. Fonksiyonlar ve yöntemler, Python'daki çağrılabilir nesnelere örnektir. Parantezler ayrıca Python'da demetlerle ilişkilidir ve gerektiğinde bir ifadenin bölümlerini gruplamak için kullanılır.
Python, yerleşik bir fonksiyon veya yöntemi köşeli parantezlerin izlemesi durumunda 'builtin_function_or_method' object is not subscriptable istisnasını yükseltir. Bir fonksiyon veya yöntemi çağırmanın doğru yolu parantez kullanmaktır.
Malta Üniversitesi’nde lisans düzeyinde Fizik ve Matematik okudum. Ardından Londra’ya taşındım ve Imperial College’da Fizik alanında doktoramı tamamladım. İnsan retinasını görüntülemek için yeni optik teknikler üzerine çalıştım. Şimdi Python hakkında yazmaya, Python’u anlatmaya ve Python öğretmeye odaklanıyorum.
Algoritmalar, sistem tasarımı ve davranışsal senaryoları kapsayan bu temel sorularla teknik mülakat sürecine hakim olun. Uzman cevapları, kod örnekleri ve kanıtlanmış hazırlık stratejileri edinin.
Git deponuzu temiz tutmak için .gitignore’u nasıl kullanacağınızı öğrenin. Bu eğitim; temelleri, yaygın kullanım durumlarını ve başlamanıza yardımcı olacak pratik örnekleri kapsar!
Python'da yaygın bir hata mesajı şöyledir:
Python, bir fonksiyon veya yöntemin hemen ardından köşeli parantez
[]gösterimi geldiğinde bu hatayı verir. Oysa fonksiyonlar çağrılabilir (callable) nesnelerdir. Bu nedenle parantez()gerektirirler; kimi zaman yuvarlak parantez de denir.Python'ın bu hatayı verdiği bir örneğe bakalım:
Aşağıdaki bölüm bu hatayı daha ayrıntılı inceler.
Hatanın Anlaşılması
Python fonksiyonları çağrılabilir nesnelerdir; bu da fonksiyon adından sonra parantez kullanarak, fonksiyon tanımındaki kodu çalıştırabileceğimiz anlamına gelir. Python'daki yerleşik fonksiyonlara en bilinen örneklerden biri
print()'tir:Python'da bir fonksiyonu çağırmak için parantez kullanılır. Ancak, parantez yerine köşeli parantez kullanmak hata üretir:
Hata mesajını temel parçalarına ayıralım:
Yukarıdaki örnekte,
print()bir yerleşik fonksiyondur. Açıklama yöntemleri de kapsar; yöntemler, bir sınıfın parçası olan fonksiyonlardır. Python'ın veri tipleriyle ilişkili pek çok yerleşik yöntemi vardır. Bu hata mesajını üreten bir başka örneğe bakalım:Genel olarak fonksiyonlarda olduğu gibi
.count()yöntemi de parantez gerektirir:Bu senaryo, giriş bölümündeki
.append()liste yöntemini içeren örneğe benzer. İşte parantez kullanan doğru sürüm:TypeError: 'function' object is not subscriptable
Python, kullanıcı tanımlı fonksiyonlarda da benzer bir hata verir:
Ancak,
greet_person()fonksiyonu Python'daki yerleşik fonksiyonlardan biri değildir. Hata mesajı bunun 'builtin_function_or_method' değil, bir 'function' olduğunu belirtir.Hata mesajının ikinci bölümü 'subscriptable' terimine atıf yapar. Bir Python nesnesi, köşeli parantez kullanarak öğelerinden birine erişebiliyorsak subscriptable kabul edilir. Subscriptable bir nesneye yaygın bir örnek, köşeli parantezle indekslenebilen bir dizidir (sequence):
Demetler (tuple) ve dizgeler (string) diğer dizi örnekleridir. Dolayısıyla onlar da subscriptable'dır:
Python eşleştirmeleri (mapping) de subscriptable'dır. Python'daki en yaygın eşleştirme sözlüktür:
Sözlüklerde köşeli parantez içinde indeks yerine anahtarlar kullanılır.
Python: Callable vs. Subscriptable
Diziler ve eşleştirmeler, subscriptable Python nesnelerine örnektir. Veri yapısının içindeki bir nesneye erişmek için nesne adının ardından köşeli parantez kullanabiliriz. Bir Python sınıfı,
.__getitem__()özel yöntemini tanımlıyorsa subscriptable nesneler oluşturur.Fonksiyonlar ve yöntemler, çağrılabilir nesnelere örnektir. Nesne adının ardından parantez kullanarak onları çağırabiliriz. Bir fonksiyon ya da yöntemi çağırmak, fonksiyon tanımındaki kodu çalıştırır.
Sınıflar da başka bir çağrılabilir Python nesnesidir. Bir sınıfı çağırmak bir örnek (instance) oluşturur. Genel olarak, bir Python nesnesi, sınıfı
.__call__()özel yöntemini tanımlıyorsa çağrılabilir kabul edilir.Çağrılamayan bir nesneyi çağırmaya çalıştığımızda Python benzer bir hata mesajı verir:
numbersdeğişkeni bir listedir ve çağrılabilir değildir. Listeden ilk öğeye erişmenin doğru yolu köşeli parantez kullanmaktır:numbers[0]. Python'da en yaygın çağrılabilir nesneler fonksiyonlar, yöntemler ve sınıflardır.'builtin_function_or_method' object is not subscriptable Hatasını Düzeltme
Python, bir fonksiyon veya yöntemin hemen ardından köşeli parantez geldiğinde ``'builtin_function_or_method' object is not subscriptable` hata mesajını verir. Fonksiyon veya yöntem adının hemen ardından gelen köşeli parantezlere dikkat edin ve bunları parantezlerle değiştirin.
Bazı durumlarda, bir fonksiyon veya yöntem argüman olarak köşeli parantezlerle tanımlanan bir liste alır. Ancak, listenin parantezlerin içinde tanımlandığına dikkat edin:
Bu örneklerde, fonksiyon veya yöntem adını parantezler izler. Parantezlerin içindeki argüman bir listedir. Liste tanımlamak için kullanılan köşeli parantez gösterimi, diziler, eşleştirmeler ve diğer subscriptable nesnelerle kullanılan köşeli parantez gösteriminden farklıdır.
Hata Ayıklama İpuçları
Yapabileceğiniz şeylerden biri, yerleşik
type()fonksiyonunu kullanarak nesne türünü kontrol etmektir:Çıktı, nesnenin çağrılabilir bir yerleşik fonksiyon veya yöntem olduğunu doğrular. Ayrıca, argümanı çağrılabilir ise
Truedöndürencallable()adlı bir yerleşik fonksiyon da vardır:Dikkate alabileceğiniz diğer hata ayıklama ipuçları:
Sonuç
Python gibi programlama dilleri, farklı amaçlar için farklı işaretler kullanır. Bir veri yapısındaki öğeye erişmek için nesne adının hemen ardından köşeli parantez kullanılır. Bu köşeli parantez gösterimi, subscriptable nesnelerde çalışır. Köşeli parantezler, bir nesne adını hemen takip etmediklerinde liste oluşturmak için de kullanılır.
Parantezler ise bir nesne adının ardından nesneyi çağırmak için kullanılır. Fonksiyonlar ve yöntemler, Python'daki çağrılabilir nesnelere örnektir. Parantezler ayrıca Python'da demetlerle ilişkilidir ve gerektiğinde bir ifadenin bölümlerini gruplamak için kullanılır.
Python, yerleşik bir fonksiyon veya yöntemi köşeli parantezlerin izlemesi durumunda
'builtin_function_or_method' object is not subscriptableistisnasını yükseltir. Bir fonksiyon veya yöntemi çağırmanın doğru yolu parantez kullanmaktır.Fonksiyonlar hakkında daha fazla bilgiyi DataCamp'in Python Fonksiyonları: Fonksiyonlar Nasıl Yazılır ve Çağrılır içeriğinde okuyabilirsiniz.