winneymj13Posts. 2 Bergabung. Sab 10 November 2018 2. 19 pagi
- Mengutip
oleh winneymj13 » Rab 06 Apr 2022 10. 03 sore
Hai,
Saya menjalankan micropython di papan Saola ESP32_S2 saya dan saya mencoba menentukan nama fungsi yang diteruskan sebagai parameter ke fungsi lain [untuk digunakan sebagai panggilan balik]
Menghasilkan kesalahan. AttributeError. objek 'fungsi' tidak memiliki atribut '__name__'
Bagaimana cara mengambil nama fungsi yang diteruskan?
Seperti yang dapat dilihat di bawah ini dalam contoh lengkap saya mencoba menambahkan metode baru ke kelas menggunakan dekorator @add_method dan berhasil. kecuali saya harus meng-hardcode nama fungsi 'foo'
Kode.
setattr[cls, 'foo', wrapper]
Yang benar-benar ingin saya lakukan adalahKode.
setattr[cls, func.__name__, wrapper]
_Contoh kode lengkapKode.
def add_method[cls]:
def decorator[func]:
@wraps[func]
def wrapper[self, *args, **kwargs]:
return func[*args, **kwargs]
# print[func]
# print[sys.modules[func.__globals__['__name__']]]
setattr[cls, 'foo', wrapper] # Hardcoded function name 'foo'...Not ideal
# setattr[cls, func.__name__, wrapper]
# Note we are not binding func, but wrapper which accepts self but does exactly the same as func
return func # returning func means func can still be used normally
return decorator
class A:
pass
# No trickery. Class A has no methods nor variables.
a = A[]
try:
a.foo[]
except AttributeError as ae:
print[f'Exception caught: {ae}'] # 'A' object has no attribute 'foo'
# Decorator can be written to take normal functions and make them methods
@add_method[A]
def foo[]:
print['hello world!']
a.foo[]
Python AttributeError
adalah pengecualian yang terjadi ketika referensi atribut atau penugasan gagal. Hal ini dapat terjadi saat dilakukan upaya untuk mereferensikan atribut pada nilai yang tidak mendukung atribut tersebut
Apa Penyebab AttributeError
Python AttributeError
dimunculkan ketika referensi atribut yang tidak valid dibuat. Ini bisa terjadi jika atribut atau fungsi yang tidak terkait dengan tipe data direferensikan padanya. Misalnya, jika suatu metode dipanggil pada nilai bilangan bulat, AttributeError
akan dimunculkan
Contoh AttributeError Python
Berikut adalah contoh Python AttributeError
yang dimunculkan saat mencoba memanggil metode pada bilangan bulat
i = 1
i.append[2]
Dalam contoh di atas, sebuah metode dicoba untuk dipanggil pada bilangan bulat. Karena bilangan bulat dalam Python tidak mendukung metode apa pun, menjalankan kode di atas memunculkan AttributeError
Traceback [most recent call last]:
File "test.py", line 2, in
i.append[2]
AttributeError: 'int' object has no attribute 'append'
_Cara Memperbaiki AttributeError dengan Python
Untuk menghindari AttributeError
dalam kode Python, pemeriksaan harus dilakukan sebelum mereferensikan atribut pada objek untuk memastikan bahwa atribut itu ada. Fungsi
Traceback [most recent call last]:
File "test.py", line 2, in
i.append[2]
AttributeError: 'int' object has no attribute 'append'
0 Python dapat digunakan untuk mengetahui semua atribut dan metode yang terkait dengan objekUntuk mengatasi AttributeError
_, blok coba-kecuali dapat digunakan. Baris kode yang dapat membuang AttributeError
harus ditempatkan di blok
Traceback [most recent call last]:
File "test.py", line 2, in
i.append[2]
AttributeError: 'int' object has no attribute 'append'
3, dan blok Traceback [most recent call last]:
File "test.py", line 2, in
i.append[2]
AttributeError: 'int' object has no attribute 'append'
4 dapat menangkap dan menangani kesalahanDengan menggunakan pendekatan di atas, contoh sebelumnya dapat diperbarui untuk menangani kesalahan
i = 1
try:
i.append[2]
except AttributeError:
print['No such attribute']>
_Di sini, pemeriksaan dilakukan untuk AttributeError
menggunakan blok coba-kecuali. Ketika kode di atas dijalankan, blok
Traceback [most recent call last]:
File "test.py", line 2, in
i.append[2]
AttributeError: 'int' object has no attribute 'append'
_4 menangkap AttributeError
dan menanganinya, menghasilkan keluaran berikutNo such attribute
Lacak, Analisis, dan Kelola Kesalahan Dengan Rollbar
Mengelola kesalahan dan pengecualian dalam kode Anda itu menantang. Itu dapat membuat penggelaran kode produksi menjadi pengalaman yang mengerikan. Mampu melacak, menganalisis, dan mengelola kesalahan secara waktu nyata dapat membantu Anda melanjutkan dengan lebih percaya diri. Rollbar mengotomatiskan pemantauan dan penyortiran kesalahan, membuat perbaikan kesalahan Python lebih mudah dari sebelumnya. Cobalah hari ini