在 while 循环条件中赋值给函数返回值,并在此过程中捕获异常



我正在学习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)的更简洁的版本?

从 Python 3.8 开始,您可以使用赋值表达式实现类似的东西,您可以在其中编写代码,例如

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

如果要在此过程中捕获异常,则应定义foo(或为foo编写包装器(来处理该异常并返回失败的值(edit:或通过,取决于上下文(对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

最新更新