在int()调用中,Python优雅失败?

1 python fsm

我必须在一个类中创建一个基本的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
Run Code Online (Sandbox Code Playgroud)

我试图想出一种更加pythonic的方式来一次读取一行并将状态转换为整数,同时将输入值保持为字符串.基本上这是个主意:

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(" ")]
Run Code Online (Sandbox Code Playgroud)

当然,当它尝试int("a")时会抛出一个ValueError.我知道我可以使用传统的循环并捕获ValueError,但我希望有更多的Pythonic方法来做到这一点.

mat*_*t b 12

你应该只是试图解析你期望整数的标记

for line in f:
    tokens = line.split(" ")
    current_state, input_val, next_state = int(tokens[0]), tokens[1], int(tokens[2])
Run Code Online (Sandbox Code Playgroud)

可以说更具可读性:

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]))
Run Code Online (Sandbox Code Playgroud)