#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
Последующие разделы книги, в которых используется этот класс, ссылаются на этот фрагмент кода.