首页 > 解决方案 > 替代连续尝试/排除块

问题描述

我对 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循环为每个容器项构造一个字典,但是真的没有其他可能更具可读性的替代方案吗?

标签: pythonerror-handlingtry-catch

解决方案


你的代码有很多混乱的原因是因为你有重复的代码。您连续四次表达相同的想法(查找一个值,如果失败则设置默认值),这自然意味着您也必须编写四次相同的支持代码。

循环是修复重复代码的好方法 - 因此使用名称列表查找并创建值字典是您在这里的完美解决方案。这使您可以编写一次逻辑,然后多次使用它。

(另外:您的代码重复导致了一个错误!前两个 try-except 块将'Error'值分配给description而不是适当的变量。重复代码可能会咬人!)


推荐阅读