python - 如何在具有相同条件的一个 try/except 块中对单个和循环操作进行分组?
问题描述
我想知道是否有任何方法可以在一个 try/except 块中对以下操作进行分组。我在这两种情况下都使用相同的异常。我试图缩短这段代码,但我没有想到任何好的东西。这是示例代码:
def cast_values(values):
try:
values['Price'] = float(values['Price'])
except KeyError:
pass
for field in ('Pages', 'Quantity', 'Discount'):
try:
values[field] = int(values[field])
except KeyError:
pass
我希望检查所有键,不管发生多少异常。
解决方案
您可以通过分解密钥与特定类型的配对来概括您的代码。try
在那里,您可以使用包含所有键/类型对的单个语句的单个循环。
def cast_values(values):
type_map = {
'Price': float,
'Pages': int,
'Quantity': int,
'Discount': int,
}
for key, type_ in type_map.items():
type_ = types.get(key, int)
try:
values[key] = type_(values[key])
except KeyError:
pass
在这种情况下,我可能会完全摆脱该try
语句,并简单地检查密钥是否在values
:
for key, type_ in type_map.items():
if key not in values:
continue
values[key] = type_(values[key])
推荐阅读
- javascript - Html Javascript / 输入输出
- excel - 粘贴时更改单元格引用
- python - 如何检查 Discord 消息的反应?
- linux - 无法在 Centos 7.3 机器上打开 Visual Studio 代码:无法写入程序用户数据
- r - 将具有不同大小元素的列表转换为R中的数据框
- pandas - 尝试打印结果时,带有 multiIndex 的 Pandas shift 会导致 numpy 异常
- react-native - 使用 Redux 工具包反应原生导航
- html - 如何使内部 div 边框扩展到外部 div
- java - 我可以像在 c++ 中一样在 java 中创建带有隐式参数的对象吗?
- javascript - ES6 相当于 SQL 交叉连接