python - 替代连续尝试/排除块
问题描述
我对 Python 还很陌生,所以我想知道是否有更简洁的替代方法来运行大量连续的try/except
块,如下所示?
try:
project_type = body.find_element_by_xpath('./div[contains(@class, "discoverableCard-type")]').text
except Exception:
project_type = 'Error'
try:
title = body.find_element_by_xpath('./div[contains(@class, "discoverableCard-title")]').text
except Exception:
title = 'Error'
try:
description = body.find_element_by_xpath('./div[contains(@class, "discoverableCard-description")]').text
except Exception:
description = 'Error'
try:
category = body.find_element_by_xpath('./div[contains(@class, "discoverableCard-category")]').text
except Exception:
category = 'Error'
...
正如在这个线程或这个线程中所建议的那样,我想我可以创建变量名称和查询列表,然后使用for
循环为每个容器项构造一个字典,但是真的没有其他可能更具可读性的替代方案吗?
解决方案
你的代码有很多混乱的原因是因为你有重复的代码。您连续四次表达相同的想法(查找一个值,如果失败则设置默认值),这自然意味着您也必须编写四次相同的支持代码。
循环是修复重复代码的好方法 - 因此使用名称列表查找并创建值字典是您在这里的完美解决方案。这使您可以编写一次逻辑,然后多次使用它。
(另外:您的代码重复导致了一个错误!前两个 try-except 块将'Error'
值分配给description
而不是适当的变量。重复代码可能会咬人!)
推荐阅读
- python - 我不得不做一个天气预报项目。无法在 jupyter 中导入数据集
- java - 如何从另一个活动设置活动的内容视图
- vue.js - 从 vue devServer 中的自定义本地域中删除端口
- ruby-on-rails - Webpacker 设置中未定义 Rails UJS
- python - 我正在尝试训练我的 X_train 和 y_train 但存在一些数组维度问题
- algorithm - 如何找到从所有可能的子数组中选择的最小元素和次小元素的最大和
- javascript - bit.dev 相当于分叉一个 repo 并提交一个 PR 是什么?
- reactjs - 反应性能优化
- r - 谷歌地形视图和卫星视图在 R 中使用 GGMAP 使用 Zoom 和 ggsn :: scalebar
- c++ - clion中llvm c++ api的语法高亮