Skip to main content
 首页 » 编程设计

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

2025年05月04日10Free-Thinker

我必须在类里面制作一个基本的 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]))