Рубрики
Без рубрики

Демистификация Ошибки Атрибута Python С Примерами

В Python Attributeerror возникает, когда мы пытаемся получить доступ к некоторым свойствам этого объекта, которыми он не обладает. В этой статье мы узнаем

Автор оригинала: Team Python Pool.

Ошибки – неотъемлемая часть жизни программиста. И это совсем не плохо, если вы получаете ошибку. Получение ошибки означает, что вы изучаете что-то новое. Но мы должны устранить эти ошибки. И прежде чем решить эту ошибку, мы должны знать, почему мы получаем эту ошибку. В python есть некоторые часто встречающиеся ошибки, такие как Ошибка типа , Синтаксическая ошибка, Ошибка ключа, Ошибка атрибута, Ошибка имени, и так далее.

В этой статье мы узнаем о том, что такое python AttributeError, почему мы его получаем и как его разрешаем? Интерпретатор Python вызывает AttributeError, когда мы пытаемся вызвать или получить доступ к атрибуту объекта, но этот объект не обладает этим атрибутом. Например, Если мы попытаемся использовать функцию upper() для целого числа, то получим ошибку атрибута.

Почему мы Получаем AttributeError?

Всякий раз, когда мы пытаемся получить доступ к атрибуту, который не принадлежит этому объекту, мы получаем attributeerror. Например, Мы знаем, что для того, чтобы сделать строку прописной, мы используем upper().

Выход-

AttributeError: 'int' object has no attribute 'upper'

Здесь мы пытаемся преобразовать целое число в заглавную букву, что невозможно, поскольку целые числа не приписывают быть верхними или нижними. Но если попытаться использовать эту функцию upper() для строки, мы получим результат, потому что строка может быть квалифицирована как верхняя или нижняя.

Некоторые распространенные ошибки, которые приводят к ошибке атрибута в python

Если мы попытаемся выполнить append() для любого типа данных, отличного от List:

Иногда, когда мы хотим объединить две строки, мы пытаемся добавить одну строку в другую, что невозможно, и мы получаем ошибку атрибута.

Выход-

AttributeError: 'str' object has no attribute 'append'

То же самое относится и к кортежам,

Выход-

AttributeError: 'tuple' object has no attribute 'append'

Попытка доступа к атрибуту класса:

Иногда мы пытаемся получить доступ к атрибутам класса, которыми он не обладает. Давайте лучше разберемся в этом на примере.

Здесь у нас есть два класса - один-класс человека, а другой - класс транспортного средства. Оба обладают разными свойствами.

class Person: 

   def __init__(self,age,gender,name): 
       
       
       

   def speak(self): 
        print("Hello!! How are you?") 

class Vehicle: 

   def __init__(self , model_type , engine_type): 
        
        

   def horn(self): 
        print("beep!! beep") 
(20,"male","ashwini") 
print(ashwini.gender) 
print(ashwini.engine_type)

Выход-

male  
AttributeError: 'Person' object has no attribute 'engine_type'
print(ashwini.horn())
AttributeError: 'Person' object has no attribute 'horn'

Выход-

Petrol 
AttributeError: 'Vehicle' object has no attribute 'gender'
print(car.speak())
Error-
AttributeError: 'Vehicle' object has no attribute 'speak'

В приведенных выше примерах, когда мы попытались получить доступ к свойству пола класса Person, нам это удалось. Но когда мы попытались получить доступ к атрибуту engine_type (), он показал нам ошибку. Это происходит потому, что у человека нет атрибута под названием engine_type. Точно так же, когда мы попытались вызвать engine_type на транспортном средстве, мы добились успеха, но это было не в случае пола, так как Транспортное средство не имеет атрибута, называемого полом.

AttributeError: 'NoneType'

Мы получаем ошибку NoneType, когда получаем "None" вместо экземпляра, который, как мы предполагаем, мы получим. Это означает, что задание провалилось или вернуло неожиданный результат.

Выход-

AttributeError: 'NoneType' object has no attribute 'upper'

При работе с модулями:

Очень часто при работе с модулями возникает ошибка атрибута. Предположим, мы импортируем модуль с именем hello и пытаемся получить доступ к двум функциям в нем. Один из них-print_name (), а другой-print_age().

Модуль Привет-

def print_name():
    print("Hello! The name of this module is module1")

import hello

hello.print_name()
hello.print_age()

Выход-

Hello! The name of this module is module1

AttributeError: module 'hello' has no attribute 'print_age'

Поскольку модуль hello не содержит атрибута print_age, мы получили атрибут Attributeerror. В следующем разделе мы узнаем, как устранить эту ошибку.

Как разрешить AttributeError в Python

Используйте справку():

Разработчики python пытались решить любую возможную проблему, с которой сталкиваются программисты Python. В этом случае также, если мы путаемся в том, принадлежит ли конкретный атрибут объекту или нет, мы можем использовать help(). Например, если мы не знаем, можем ли мы использовать append() для строки, мы можем print(help(str)) знать все операции, которые мы можем выполнять со строками. Не только эти встроенные типы данных, но мы также можем использовать help() для пользовательских типов данных, таких как Class.

Например, если мы не знаем, какими атрибутами обладает класс Person, объявленный нами выше,

print(help(Person)) 

Выход-

ошибка атрибута python
ошибка атрибута python

Разве это не здорово! Это именно те атрибуты, которые мы определили в нашем классе Персон.

Теперь давайте попробуем использовать help() для нашего модуля hello внутри модуля hi.

import hello

help(hello)
Help on module hello:
NAME
hello
FUNCTIONS
print_name()

Использование оператора Try – Except

Очень <сильный>профессиональный способ справиться не только с атрибутивной ошибкой, но и с любой ошибкой-это использовать try-except операторы. Если мы думаем, что можем получить ошибку в определенном блоке кода, мы можем заключить их в href="https://en.wikipedia.org/wiki/Exception_handling">попробуйте заблокировать. Давайте посмотрим, как это сделать. href="https://en.wikipedia.org/wiki/Exception_handling">попробуйте заблокировать. Давайте посмотрим, как это сделать.

Предположим, мы не уверены, содержит ли класс Person атрибут engine_type или нет, мы можем заключить его в блок try.

class Vehicle: 

   def __init__(self , model_type , engine_type): 
        
        

   def horn(self): 
        print("beep!! beep") 
( "Hatchback" , "Petrol" ) 

try: 
   print(car.engine_type) 
   print(car.gender) 

except Exception as e: 
   print(e)

Выход-

Petrol 
'Vehicle' object has no attribute 'gender'.

Должен Читать

  • Как преобразовать строку в нижний регистр в
  • Как вычислить Квадратный корень
  • Пользовательский ввод | Функция ввода () | Ввод с клавиатуры
  • Лучшая книга для изучения Python

Вывод

Всякий раз, когда мы пытаемся получить доступ к атрибуту объекта, который ему не принадлежит, мы получаем AttributeError в Python. Мы можем решить эту проблему с помощью функции help() или операторов try-except.

Попробуйте запустить программы на вашей стороне и дайте нам знать, если у вас есть какие-либо вопросы.

Счастливого кодирования!