Ini adalah Kesalahan umum Python ketika Anda menggunakan kata string alih-alih kata kunci str saat mengetik konversi atau semacamnya di program Anda
Dalam tutorial ini, kita akan belajar cara membuat ulang NameError ini dan cara menangani kesalahan ini
Buat ulang NameError
Mari kita buat ulang kesalahan ini
Program Piton
n = 100 s = string(n)JalankanKeluaran
Traceback (most recent call last): File "example1.py", line 2, in <module> s = string(n) NameError: name 'string' is not defined_Apa yang kami coba di sini adalah mengonversi angka menjadi string
Tapi kita semua tahu bahwa str(angka) mengubah angka menjadi string tetapi bukan string(angka). Ini semacam kesalahan ketik dari sudut pandang programmer
Solusi untuk NameError
Anda harus menggunakan kata kunci Python yang benar
Misalnya, mari kita perbaiki program Python di atas, dengan mengganti kata –string dengan kata kunci yang benar str
Fungsi >>> n = 10 >>> len(n) Traceback (most recent call last): File "", line 1, in TypeError: object of type 'int' has no len() 1 bawaan bekerja pada beberapa objek, tetapi tidak pada yang lain. Hanya hal-hal yang memiliki panjang yang berfungsi dengan fungsi >>> n = 10 >>> len(n) Traceback (most recent call last): File "", line 1, in TypeError: object of type 'int' has no len() 1
Daftar, kumpulan, kamus, string, dan sebagian besar struktur data di Python memiliki panjang
>>> numbers = [2, 1, 3, 4, 7, 11, 18] >>> len(numbers) 7 _
Tapi angka tidak
>>> n = 10 >>> len(n) Traceback (most recent call last): File "", line 1, in TypeError: object of type 'int' has no len()
Saat membuat kelas dengan Python, Anda dapat mengontrol apakah instance dari kelas tersebut memiliki panjang
Fungsi >>> n = 10 >>> len(n) Traceback (most recent call last): File "", line 1, in TypeError: object of type 'int' has no len() 1 bawaan Python memanggil metode >>> n = 10 >>> len(n) Traceback (most recent call last): File "", line 1, in TypeError: object of type 'int' has no len() 6 (diucapkan "dunder >>> n = 10 >>> len(n) Traceback (most recent call last): File "", line 1, in TypeError: object of type 'int' has no len() 1") pada objek yang Anda berikan
Jadi jika objek tersebut memiliki metode >>> n = 10 >>> len(n) Traceback (most recent call last): File "", line 1, in TypeError: object of type 'int' has no len() _6, objek tersebut memiliki panjang
>>> numbers = [2, 1, 3, 4, 7, 11, 18] >>> numbers.__len__() 7
Jika tidak memiliki metode >>> n = 10 >>> len(n) Traceback (most recent call last): File "", line 1, in TypeError: object of type 'int' has no len() _6, fungsi >>> n = 10 >>> len(n) Traceback (most recent call last): File "", line 1, in TypeError: object of type 'int' has no len() 1 memunculkan >>> numbers = [2, 1, 3, 4, 7, 11, 18] >>> numbers.__len__() 7 1 sebagai gantinya
Traceback (most recent call last): File "", line 1, in TypeError: object of type 'int' has no len()
Bagaimana cara membuat instance kelas Anda memiliki panjang?
Modul >>> numbers = [2, 1, 3, 4, 7, 11, 18] >>> numbers.__len__() 7 _2 Python memiliki fungsi (>>> numbers = [2, 1, 3, 4, 7, 11, 18] >>> numbers.__len__() 7 3) yang dapat secara acak memilih item dari urutan yang diberikan
>>> import random >>> colors = ['red', 'blue', 'green', 'purple'] >>> random.choice(colors) 'purple'
Fungsi >>> numbers = [2, 1, 3, 4, 7, 11, 18] >>> numbers.__len__() 7 _3 ini hanya berfungsi pada objek yang dapat diindeks dan memiliki panjang
Di sini kita memiliki kelas bernama >>> numbers = [2, 1, 3, 4, 7, 11, 18] >>> numbers.__len__() 7 5
class ForgivingIndexer: def __init__(self, sequence): self.sequence = sequence def __getitem__(self, index): return self.sequence[int(index)]
Kelas ini memiliki metode >>> numbers = [2, 1, 3, 4, 7, 11, 18] >>> numbers.__len__() 7 _6 dan metode >>> numbers = [2, 1, 3, 4, 7, 11, 18] >>> numbers.__len__() 7 7. Metode >>> numbers = [2, 1, 3, 4, 7, 11, 18] >>> numbers.__len__() 7 _7 itu memungkinkan instance kelas ini diindeks menggunakan tanda kurung siku (>>> numbers = [2, 1, 3, 4, 7, 11, 18] >>> numbers.__len__() 7 9)
Tapi ini tidak cukup untuk memungkinkan objek >>> numbers = [2, 1, 3, 4, 7, 11, 18] >>> numbers.__len__() 7 5 kita bekerja dengan fungsi Traceback (most recent call last): File "", line 1, in TypeError: object of type 'int' has no len() 1. Jika kita melewatkan objek >>> numbers = [2, 1, 3, 4, 7, 11, 18] >>> numbers.__len__() 7 _5 ke fungsi Traceback (most recent call last): File "", line 1, in TypeError: object of type 'int' has no len() 1, kita akan mendapatkan error
>>> import random >>> fruits = ForgivingIndexer(['apple', 'lime', 'pear', 'watermelon']) >>> random.choice(fruits) Traceback (most recent call last): File "", line 1, in File "/usr/lib/python3.10/random.py", line 378, in choice return seq[self._randbelow(len(seq))] TypeError: object of type 'ForgivingIndexer' has no len()
Python memberi kita kesalahan karena >>> numbers = [2, 1, 3, 4, 7, 11, 18] >>> numbers.__len__() 7 5 objek tidak memiliki panjang, yang dibutuhkan oleh fungsi Traceback (most recent call last): File "", line 1, in TypeError: object of type 'int' has no len() 1. Objek ini tidak berfungsi dengan fungsi >>> n = 10 >>> len(n) Traceback (most recent call last): File "", line 1, in TypeError: object of type 'int' has no len() 1 bawaan
>>> fruits = ForgivingIndexer(['apple', 'lime', 'pear', 'watermelon']) >>> len(fruits) Traceback (most recent call last): File "", line 1, in TypeError: object of type 'ForgivingIndexer' has no len()
Untuk mendukung fungsi >>> n = 10 >>> len(n) Traceback (most recent call last): File "", line 1, in TypeError: object of type 'int' has no len() _1 bawaan, kita dapat menambahkan metode >>> n = 10 >>> len(n) Traceback (most recent call last): File "", line 1, in TypeError: object of type 'int' has no len() 6 ke kelas ini
def __len__(self): return len(self.sequence)
Sekarang instance dari kelas ini memiliki panjang
>>> import random >>> fruits = ForgivingIndexer(['apple', 'lime', 'pear', 'watermelon']) >>> len(fruits) 4
Dan mereka juga bekerja dengan Traceback (most recent call last): File "", line 1, in TypeError: object of type 'int' has no len() 1
>>> n = 10 >>> len(n) Traceback (most recent call last): File "", line 1, in TypeError: object of type 'int' has no len() 0
Ringkasan
Anda dapat membuat objek Anda berfungsi dengan fungsi >>> n = 10 >>> len(n) Traceback (most recent call last): File "", line 1, in TypeError: object of type 'int' has no len() 1 bawaan dengan menambahkan metode >>> n = 10 >>> len(n) Traceback (most recent call last): File "", line 1, in TypeError: object of type 'int' has no len() 6 ke objek tersebut. Anda hanya akan menambahkan metode >>> n = 10 >>> len(n) Traceback (most recent call last): File "", line 1, in TypeError: object of type 'int' has no len() _6 jika Anda membuat struktur data khusus, seperti urutan atau pemetaan