如何让“int”解析空字符串?
我有一个解析系统,用来处理固定长度的文本记录,具体是根据一个布局表来进行的:
parse_table = [\
('name', type, length),
....
('numeric_field', int, 10), # int example
('textc_field', str, 100), # string example
...
]
这个系统的想法是,给定一个消息类型的表格,我只需要遍历字符串,然后根据表格里的内容重建一个字典。
现在,我可以处理字符串和正常的整数,但int()
函数无法处理全是空格的字段(这当然是有原因的)。
我想通过定义一个int
的子类来处理空字符串。这样,我就可以在不在解析代码中引入额外复杂处理的情况下,直接更改表格中相应条目的类型,让它“正常工作”。
但是,我搞不清楚如何在子类中重写内置类型的构造函数,因为在子类中定义构造函数似乎没有用。我觉得我在理解Python内置类型的工作原理上缺少了一些基本知识。
我应该怎么做呢?我也愿意考虑一些不太复杂的替代方案。
4 个回答
6
在编程中,有时候我们需要让程序在特定的条件下执行某些操作。这就像给程序设定了一些规则,只有当这些规则被满足时,程序才会做出反应。
比如说,你可能想让程序在用户输入一个特定的数字时,显示一条消息。为了实现这个功能,我们可以使用“条件语句”。条件语句就像是一个判断,如果条件成立,程序就会执行某个动作;如果条件不成立,程序就会跳过这个动作。
在代码中,条件语句通常是用“if”这个词来开始的。接下来,我们会写出我们想要检查的条件,然后在条件成立时要执行的代码。这样,程序就能根据不同的情况做出不同的反应。
总之,条件语句帮助程序根据情况做出决策,就像人类在生活中根据不同的情况做出不同的选择一样。
lenient_int = lambda string: int(string) if string.strip() else None
#else 0
#else ???
60
使用 int()
函数,并传入参数 s.strip() or 0
,也就是说:
int(s.strip() or 0)
或者如果你确定这个字符串里只会有数字字符或者是空的(""
),那么你可以直接这样做:
int(s or 0)
在你的具体情况下,你可以使用 lambda 表达式,比如:
parse_table = [\
....
('numeric_field', lambda s: int(s.strip() or 0), 10), # int example
...
]
50
使用工厂函数来代替int或者int的子类:
def mk_int(s):
s = s.strip()
return int(s) if s else 0