запрос о том, как использовать ключевое слово «raise» в python

#python

#python

Вопрос:

Этот код заимствован из книги Майкла Т. «СТРУКТУРА ДАННЫХ И АЛГОРИТМЫ В PYTHON». Гудрич.

 class ArrayStack:

    def __init__(self):
        self.data=[]

    def __len__(self):

        return len(self.data)

    def is_empty(self):

        return len(self.data)==0

    def push(self,e):

        self.data.append(e)

    def top(self):

        if self.is_empty():
            
            raise Empty('Stack is empty')
         
        else:
            return self.data[-1]

    def pop(self):

        if self.is_empty():
            raise Empty('Stack is empty')
        else:
            return self.data.pop()
 
 

Здесь автор использует raise Empty("stack is empty') для создания сообщения об ошибке, но ключевое слово «Empty» не подходит для использования с raise, и вместо этого оно выдает NameError при запуске программы. Я не понимаю, почему автор использовал его здесь вместо того, чтобы использовать Exception ключевое слово с raise .

Оно использовалось во всех структурах данных в этой книге, поэтому я не думаю, что это опечатка.(Прошу прощения, если я упускаю что-то основное)

Комментарии:

1. Возможно ли, что автор Empty ранее определил исключение в тексте?

2. class Empty(Exception): pass должен это сделать.

3. Глядя на код, эта реализация дает нулевое значение по сравнению со списком, используемым внутри компании. Он просто переименовывает материал.

Ответ №1:

Книга определяет Empty класс в «Фрагменте 6.1» в главе 6 книги. Описание этого фрагмента таково:

Фрагмент кода 6.1: Определение для пустого класса исключений.

а сам фрагмент — это:

 class Empty(Exception):
    """Error attempting to access an element from an empty container."""
    pass
 

Последующие разделы книги, в которых используется этот класс, ссылаются на этот фрагмент кода.