Улучшение кода, Python трудный путь ex48
После большого замешательства я выполнил упражнение и создал этот код, который соответствует его тестам.
WORD_TYPES = {
'verb' : ['go', 'kill', 'eat'],
'direction' : ['north', 'south', 'east', 'west'],
'noun' : ['bear', 'princess'],
'stop' : ['the','in','of']
}
def scan(sentance):
listy = []
counter = 0
for word in sentance.split():
try:
count = counter
for key, value in WORD_TYPES.iteritems():
for ind in value:
if ind == word:
counter += 1
listy.append((key,ind))
if count == counter:
raise KeyError
except KeyError:
try:
value = int(word)
listy.append(('number',value))
except ValueError:
listy.append(('error',word))
return listy
Автор хотел, чтобы мы использовали попробовать и исключения, но я не чувствую, что я использовал их эффективно. Как лучше использовать их здесь? Кроме того, когда попытка и исключения действительно идеальны? Любые другие советы по улучшению кода также приветствуются.
1 ответ
Я предполагаю, что вы имеете в виду упражнение в http://learnpythonthehardway.org/book/ex48.html
Автор говорит использовать try
а также except
"обманывать" при интерпретации чисел, потому что, как правило, обычный способ сделать это будет использовать регулярные выражения. С использованием int()
Функция, чтобы попытаться преобразовать неизвестные слова в int, вы можете интерпретировать неудачу как приличный показатель того, что это не число - следовательно, перехватывая ValueError
исключение.
Ваше другое использование исключений было ненужным.
Конструкция try-исключения используется только для обработки исключений, которые могут выдавать модули. Он никогда не должен использоваться как альтернатива if-else.
Кроме того, вам не нужно проходить через каждый элемент списка, чтобы найти совпадение, просто используйте in
оператор.
if ind in value:
# Do Stuff