在while循环条件中分配给函数返回值,并一路捕获异常

时间:2018-10-17 15:48:39

标签: python

我正在学习C,以帮助我理解Python。

可以在C语言中编写如下代码:

int *ptr;
while ((c = scanf("%d", ptr)) == 1)
    // do something.

在Python中,我会写

content = input()
while True:
    try:
       integer = int(content)
    except:
       print("try again")
       content = input()
    else:
       break

与C相比,Python代码显得笨拙。是否可以编写更简洁的版本,类似于((c = scanf("%d", ptr)) == 1)

1 个答案:

答案 0 :(得分:4)

从Python 3.8开始,您可以使用Assignment Expressions实现类似的功能,在其中可以编写诸如

的代码
while (c := foo()) == bar:
    # do stuff with c

如果您想一路捕获异常,则应定义foo(或为foo写一个包装器)来处理该异常并返回失败的值(编辑:或通过, (取决于上下文)对bar的检查。

在这种情况下,代码可能如下所示:

def get_input():
    try:
        return int(input())
    except ValueError:
        return None # explicit is better than implicit

while (c := get_input()) is None:
    print('try again')

# do stuff with c