我在很多困惑之后完成了练习,并使这段代码符合他的测试。
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
作者希望我们使用try和excepts,但我不觉得我有效地使用它们。在这里使用它们的更好方法是什么?此外,什么时候尝试和除外实际上理想?还欢迎任何其他改进代码的技巧。
答案 0 :(得分:0)
我假设你指的是http://learnpythonthehardway.org/book/ex48.html
中的练习作者说要使用except
和int()
来&"作弊"在解释数字时,通常,这样做的常用方法是使用正则表达式。使用ValueError
函数尝试将未知单词转换为int,您可以将失败解释为不是数字的正确指示 - 因此捕获in
异常。
您不必使用其他例外情况。
try-except结构仅用于处理模块可以抛出的异常。它永远不应该用作if-else的替代。
此外,您不需要浏览列表中的每个元素来查找匹配项,只需使用if ind in value:
# Do Stuff
运算符即可。
$p