如果在python中不是None,则转换值

Dan*_*ner 1 python

如果你需要解析一些有或没有某些条目的XML,你通常会得到这样的模式:

planet = system.findall('.//planet')
row['discoveryyear'] = int(planet.findtext("./discoveryyear")) if planet.findtext("./discoveryyear") else None
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法呢?我想避免第二个planet.findtext调用,但也不想写另一行文本来存储变量

Rem*_*ich 7

我提出了一个辅助函数,而不是try/except解决方案:

def find_int(xml, text):
    found = xml.findtext(text)
    return int(found) if found else None

row['discoveryyear'] = find_int(planet, "./discoveryyear")
Run Code Online (Sandbox Code Playgroud)

(注意,found如果是的话也是假的'',这也是返回None的好例子)


Fab*_*tor 5

这样就可以了(除非它是在第 0 年发现的,哈哈):

row['discoveryyear'] = int(planet.findtext("./discoveryyear") or 0) or None
Run Code Online (Sandbox Code Playgroud)