Objek fungsi tidak memiliki atribut python

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 adalah

Kode.

setattr(cls, func.__name__, wrapper)
_

Contoh kode lengkap

Kode.

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 objek

Untuk 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 kesalahan

Dengan 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 berikut

No 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

Bagaimana cara memperbaiki objek python tidak memiliki atribut?

Untuk menyelesaikan AttributeError , blok coba-kecuali dapat digunakan . Baris kode yang dapat membuang AttributeError harus ditempatkan di blok try, dan blok exception dapat menangkap dan menangani kesalahan.

Apa arti objek tidak memiliki atribut dalam python?

Ini hanya karena tidak ada atribut dengan nama yang Anda panggil, untuk Objek itu . Ini berarti Anda mendapatkan kesalahan saat "modul" tidak berisi metode yang Anda panggil.

Apa itu objek fungsi di python?

Di Python, fungsi berperilaku seperti objek lain, seperti int atau daftar. Itu artinya Anda bisa menggunakan fungsi sebagai argumen untuk fungsi lain, menyimpan fungsi sebagai nilai kamus, atau mengembalikan fungsi dari fungsi lain

Mengapa saya mendapatkan kesalahan atribut di python?

Salah satu error di Python yang paling sering terjadi adalah “AttributeError”. AttributeError dapat didefinisikan sebagai kesalahan yang muncul saat referensi atau penugasan atribut gagal. Misalnya, jika kita mengambil variabel x kita diberi nilai 10. Dalam proses ini misalkan kita ingin menambahkan nilai lain ke variabel itu