Python 优雅地在 int() 调用上失败?

标签 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

我正在尝试想出一种更符合 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/

相关文章:

python - pandas 根据单元格内容删除行,没有标题

python - 没有库的python中的排列

c++ - FSM 中的切换状态

java - 什么是 Erlang 替代品?

python - 测试字典中是否存在某个键,并在相同的 if 中进行另一个测试

python - 如何从 pandas 图中提取数据?

python - 如何有效地检查许多条件并在正确的情况下分配不同的 id?

java - Java 中具有对象状态的 FSM

javascript - 使用xstate,是否可以配置一个适用于所有状态并在所有状态和子状态下以相同方式处理的事件?

ruby-on-rails - 在 Rails 上验证有限状态机(使用 AASM)