我必须在类里面制作一个基本的 FSM,并且我正在用 Python 编写它。作业要求我们从文本文件中读取机器的转换。因此,例如,具有 3 个状态的 FSM,每个状态都有 2 个可能的转换,可能的输入为“a”和“b”,wolud 有一个如下所示的文本文件:
2 # first line lists all final states
0 a 1
0 b 2
1 a 0
1 b 2
2 a 0
2 b 1
我正在尝试想出一种更符合 Python 风格的方法来一次读取一行并将状态转换为整数,同时将输入值保持为字符串。基本上是这样的想法:
self.finalStates = f.readline().strip("\n").split(" ")
for line in f:
current_state, input_val, next_state = [int(x) for x in line.strip("\n").split(" ")]
当然,当它尝试 int("a") 时,它会抛出一个 ValueError。我知道我可以使用传统的循环并只捕获 ValueError,但我希望有一种更 Pythonic 的方式来做到这一点。
最佳答案
你真的应该只尝试解析你期望为整数的标记
for line in f:
tokens = line.split(" ")
current_state, input_val, next_state = int(tokens[0]), tokens[1], int(tokens[2])
可以说更具可读性:
for line in f:
current_state, input_val, next_state = parseline(line)
def parseline(line):
tokens = line.split(" ")
return (int(tokens[0]), tokens[1], int(tokens[2]))
关于Python 优雅地在 int() 调用上失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1597114/