【问题标题】:how can i ignore error in python properly?我怎样才能正确忽略python中的错误?
【发布时间】:2020-05-30 19:17:08
【问题描述】:

我正在尝试网页抓取。

使用 BeautifulSoup,我正在解析几个对象并遇到一个问题。

问题是,我无法使用“查找”方法预测错误发生的位置。

看起来像

a = soup.find(something).find(something)
b = soup.find(something)
...
f = soup.find(something).find(something)

在a、b、c、d、e、f中,错误可能发生在任何地方,不应修改其代码。

变量'b'无关紧要,因为它是None,没关系。

但变量 'a' 或 'f' 有问题,因为它会结束脚本。

我知道有“try-exception”语法,但这不是我想要的。 当然也可以这样写:

try : 
 a = soup.find(something).find(something)
except Exception:
 a = None
...
try : 
 f = soup.find(something).find(something)
except Exception:
 f = None

看起来很荒谬,不是吗?

我该如何优雅地处理它?

【问题讨论】:

  • 问题是你链接了两个不能保证找到你需要的函数调用。我要做的是检查是否可以将soup.find(something).find(something) 合并到soup.find(something)
  • @YacineMahdid 你是对的。但第二种“查找”方法没有区分的属性。也许我需要把它分成两个步骤。还是谢谢你

标签: python exception error-handling beautifulsoup


【解决方案1】:

把它分成两个步骤能解决问题吗?

类似:

a = soup.find(something)
if a is not None:
    a = a.find(something)

如果不是,我同意AttributeError的建议。

您可能会发现 this question 关于异常处理很有趣/很有帮助。

【讨论】:

    【解决方案2】:

    我希望这能解决您的问题。只需添加 pass in except 语句

    except:
        pass
    

    【讨论】:

    • 仅供参考--except: passconsidered an anti-pattern
    • 对不起,但那不是我想要的。如果在分配 a 时发生错误,则不会定义其余变量(b,c,d,e,f),对吧?
    【解决方案3】:

    在你的情况下,你应该使用:

    try:
        f = soup.find(something).find(something)
    except AttributeError:
        f = None
    

    【讨论】:

    • 但是应该分配几个变量。对不起,但这不是我想要的。无论如何,谢谢。
    • 每个异常视情况而定
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-18
    • 2016-06-15
    • 2021-09-24
    • 1970-01-01
    相关资源
    最近更新 更多