首页 > 解决方案 > 在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

解决方案


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

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

推荐阅读