Во-первых, это коды, которые мне нужно проверить:
class ParserError(Exception):
pass
class Sentence(object):
def __init__(self, subject, verb, object):
self.subject = subject [1]
self.verb = verb[1]
self.object = object[1]
def peek(word_list):
if word_list:
word = word_list[0]
return word[0]
else:
return None
def match(word_list, expecting):
if word_list:
word = word_list.pop(0)
if word[0] == expecting:
return word
else:
return None
else:
return None
def skip (word_list, word_type):
while peek(word_list) == word_type:
match(word_list, word_type)
def parse_verb(word_list):
skip(word_list, 'stop')
if peek(word_list) == 'verb':
return match(word_list, 'verb')
else:
raise ParserError("Expected a verb next.")
def parse_object(word_list):
skip(word_list,'stop')
next = peek(word_list)
if next == 'noun':
return match(word_list, 'noun')
if next == 'direction':
return match(word_list, 'direction')
else:
raise ParserError('Expected a noun or direction next.')
def parse_subject(word_list, subj):
verb = parse_verb(word_list)
obj = parse_object(word_list)
return Sentence(subj, verb, obj) # 执行 class Sentence
def parse_sentence(word_list):
skip(word_list, 'stop')
start = peek(word_list)
if start == 'noun':
subj = match(word_list, 'noun')
return parse_sentence(word_list, subj)
elif start == 'verb':
# assume the subject is the player then
return parse_subject(word_list, ('noun', 'player'))
else:
raise ParserError("Must start with subject, object, or verb not: %s" % start)
Список, в который я набрал: [('глагол', 'вкус'), ('направление', 'хорошо'), ('существительное', 'пицца')]] Первое значение в этом списке: ('глагол', ' «вкус») и его word_type - «глагол», он соответствует слову «type_type», который я дал в своей кодировке, но получил ошибку AssertionError: None! = «глагол». Я думаю, что это неразумно.
def test_skip():
skipA = skip([('verb','taste'),('direction','good'),('noun','pizza')], 'verb')
assert_equal(skipA, 'verb')
# assert_equal(skipA, None)
3 ответа
Функция skip
не возвращает никакого значения (что означает, что она возвращает None
).
Итак, skipA
равен None
, и утверждение не выполняется.
Может быть проблема с методом «пропустить», потому что «пропустить» не возвращает никакого значения, которое означает, что «пропустить» возврат Нет
Вам нужен возврат в вашей функции пропуска. Вы возвращаетесь в peek and match, но сфера вашего вызова skip и получения значения оттуда означает, что вам также нужно вернуться оттуда.
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.