Python中对None的if else判断

0 投票
5 回答
21489 浏览
提问于 2025-04-16 18:00

有没有办法在Python中把这个写成一行,或者更好的是,作为一个表达式而不是语句呢?

parts = ['0', '1', 'None', '5', '4']
[int(p) for p in parts]

当然,这样会报错,

ValueError: invalid literal for int() with base 10: 'None'

所以:

[p=='None' and None or int(p) for p in parts]

这样也不行,因为你不能可靠地用None和and/or的组合。即使p=='None'是真的,None也相当于假,所以会跳到or的部分。

[int(p) if p=='None' else None for p in parts]

这个也不行。我猜int(p)是在条件之前就被计算了?(这听起来有点奇怪。)

a = []
for p in parts:
    if p=='None': k = None; else: k = int(p)
    a.append(k)

不行,语法无效。

a = []
for p in parts:
    if p=='None':
        k = None;
    else:
        k = int(p)
    a.append(k)

啊!终于找到了。但是难道没有更简短的方法来写这么简单的循环吗?

5 个回答

4
[ [int, eval] [p=='None'] (p) for p in parts]

应该保存,因为eval只是在字符串'None'上被调用。

7

差不多就要成功了:

[int(p) if p != 'None' else None for p in parts]
14

你几乎做对了:

[None if p == 'None' else int(p) for p in parts]

撰写回答