python - 在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
)来处理该异常并返回一个失败(编辑:或通过,取决于上下文)检查的值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
推荐阅读
- python - 具有深度导航的 Scrapy
- pytorch - 张量不能用 unsqueeze(2) 自动分级
- sql - 如何使用 SQL 作业生成 SSAS 表格模型的 XMLA 脚本?
- regex - Ruby:从句子中删除所有感叹号,除了结尾
- redux - 用于处理不同步的规范化状态的 Reducer 代码
- javascript - 无法更改 react-js 中的下拉元素颜色
- python - 如何使用python在csv中的特定列中逐行添加一些文本
- opencv - HoughLinesP:线条没有到达边界
- python - Hstack数组函数,未知回溯错误
- javascript - 在组件属性中使用 React.forwardRef 内联是否有效?