我正在学习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)
?
答案 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