如何在实现自动机时处理Python KeyError?

时间:2017-07-05 09:25:37

标签: python

我正在使用Python实现一个简单的自动机功能。

def RunAutomata(transition, initial, accepting, s):
    state = initial
    for c in s:
        try:
            state = transition[state][c]
        except KeyError:
            return False
    return state in accepting

dfa = {0:{'a':1, 'b':2},
       1:{'c':3,'d':2},
       2:{'f':3},
       3:{'e':1}}

RunAutomata(dfa, 0, {2}, 'bfecedfedf')

这段代码的直觉:它会检查dfa和字符串,以确定在给定的dfa下是否接受该字符串。如果接受,则返回True,否则返回False。

在这里你可以看到,在字典中,我使用了字母键,因此在遍历时,如果找不到键,则抛出KeyError。 我使用try-except块处理它,但我想知道是否有更好的替代方法可以使用异常处理基础。

修改:从@omri_sadon获得解决方案。谢谢。请随意发布其他一些不同的方式。

1 个答案:

答案 0 :(得分:3)

您可以使用dict get方法。

transition.get(state) # default for None

transition.get(state, False) # If key not in dict, False is returned

方法get()返回给定键内的值。

如果密钥不在dict中,则返回默认值。