Python 如何在不重复代码的情况下用空格填充例外字段?

Python 如何在不重复代码的情况下用空格填充例外字段?,python,selenium,exception,Python,Selenium,Exception,我正在运行一个网页抓取程序,从一个站点抓取某些数据字段,但是我不能保证所有字段都出现在给定的页面上。如果字段不存在,则应为空。目前,我的代码如下所示 try: field1 = scrape_data_field1(field1) except NotOnPageError: field1 = "" try: field2 = scrape_data_field2(field2) except NotOnPageError: field2 =

我正在运行一个网页抓取程序,从一个站点抓取某些数据字段,但是我不能保证所有字段都出现在给定的页面上。如果字段不存在,则应为空。目前,我的代码如下所示

try:
    field1 = scrape_data_field1(field1)
except NotOnPageError:
    field1 = ""

try:
    field2 = scrape_data_field2(field2)
except NotOnPageError:
    field2 = ""

try:
    field3= scrape_data_field3(field3)
except NotOnPageError:
    field3 = ""

我不能在同一个try-except块中将这些字段分组在一起,因为这样即使缺少一个字段,它们也会被作为空白填写。对于这个问题,有没有比我目前正在做的笨重的解决方案更优雅的解决方案?如果相关,我将使用selenium从页面中刮取数据。

您是否考虑过将
字段
变量绑定到iterable结构中的相关函数?这将允许您在结构上进行迭代,并将相同的逻辑应用于函数/变量集

下面的方法似乎非常巧妙地解决了您的问题,因为将所有这些逻辑放在一个
try
/
结构中是不合适的,因为引发的第一个异常必然会阻止任何进一步的字段被尝试,正如您在原始帖子中强调的那样

字段映射=[
{“field”:field1,“function”:scrape_data_field1},
{“field”:field2,“function”:scrape_data_field2},
{“field”:field3,“function”:scrape_data_field3}
]
对于字段中的m_映射:
尝试:
m[“函数”](m[“字段”])
除NOTNAPGEERROR外:
m[“字段”]=“”

如您所见,此解决方案基本上将每个
字段
与其对应的
scrape_data_字段
函数分组为
dict
中的值。这些
dict
结构存储在一个可以迭代的
列表中,以便相同的逻辑可以应用于每个变量/函数配对-即每个函数都是使用运行时传递的配对
字段执行的。

一种策略可能是生成一个接收函数的函数
scrape_data_field1
和参数'field1'并返回try except的结果

def try_execpt_scrape_data(field, _function):
    try:
        field_out = _function(field)
    except:
        field_out = ""

    return field_out

def _function(argument):
    return_this = argument * argument
    return return_this

field1 = 3

field_out = try_execpt_scrape_data(field1, _function)
print(field_out)

啊,我现在意识到我的问题有点错了。我不能对每个字段使用相同的scrape_data()函数。这个问题实际上有点不同,我应该说清楚(即field1=scrape_field1(),等等),我应该修改这个问题还是接受这个答案,因为你已经回答了我提出的问题?我会修改这个问题,我会根据变化循环更新/删除我的答案。不幸的是,我现在刚离开家,怀疑明天之前我是否有机会回答这个问题的任何更新。@JoshZwiebel只是想让你知道,我已经根据你在这里概述的更改和你对OP的编辑更新了我的答案。