代码改进,Python ex48的难点

时间:2016-06-02 04:26:20

标签: python python-2.7 try-except

我在很多困惑之后完成了练习,并使这段代码符合他的测试。

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,但我不觉得我有效地使用它们。在这里使用它们的更好方法是什么?此外,什么时候尝试和除外实际上理想?还欢迎任何其他改进代码的技巧。

1 个答案:

答案 0 :(得分:0)

我假设你指的是http://learnpythonthehardway.org/book/ex48.html

中的练习

作者说要使用exceptint()来&"作弊"在解释数字时,通常,这样做的常用方法是使用正则表达式。使用ValueError函数尝试将未知单词转换为int,您可以将失败解释为不是数字的正确指示 - 因此捕获in异常。

您不必使用其他例外情况。

  

try-except结构仅用于处理模块可以抛出的异常。它永远不应该用作if-else的替代。

此外,您不需要浏览列表中的每个元素来查找匹配项,只需使用if ind in value: # Do Stuff 运算符即可。

$p