我正在学习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