Skip to main content
 首页 » 编程设计

python之将方法调用作为变量传递给错误处理函数

2025年05月04日8小虾米

尝试在不向我的代码中添加 buku try/except 语句的情况下实现简单的错误处理。

我的 if_error 函数试图模拟 excel 中的 iferror(value,value_if_error) 公式。

If the value (another formula) is valid,  
     return its resulting value  
else  
     return value_if_error 

如何将带有参数的 beautifulsoup 对象(汤)的方法调用传递给通用的 try/except 函数?

  • 尝试过 lambda,但对参数和 soup 的理解程度不够。
  • 查看了 Partial 但没有看到如何调用漂亮的 soup 方法
  • 查看了 this 但没看到汤是怎么传的?

我的代码:

def if_error(fn,fail_value): 
    try: 
      value = fn 
    except: 
      value = fail_value 
    return value 
 
def get_trulia_data(soup): 
    d = dict() 
 
    description = if_error(soup.find('div', attrs={'class': 'listing_description_module description'}).text,'') 
 
    sale_price = if_error(soup.find('div', attrs={'class': 'price'}).text,'0') 
    sale_price = re.sub('[^0-9]', '', sale_price) 
 
    details = if_error(soup.find('ul', attrs={'class': 'listing_info clearfix'}),'') 
 
    bed = if_error(soup.find('input', attrs={'id': 'property_detail_beds_org'})['value'],'') 
    bath = if_error(soup.find('input', attrs={'id': 'property_detail_baths_org'})['value'],'') 
 
    ... 
 
    return d 

错误:

Traceback (most recent call last): 
data_dict = get_trulia_data(url) 
description = if_error(soup.find('div', attrs={'class': 'listing_description_module description'}).text,'') 
AttributeError: 'NoneType' object has no attribute 'text' 

soup.find 方法在到达 if_error 函数之前一直触发。我该如何解决这个问题?

请您参考如下方法:

这个怎么样:

def if_error(fn, fail_value, *args, **kwargs): 
    try: 
      return fn(*args, **kwargs) 
    except: 
        return fail_value 
 
def test_fail(x): 
    raise ValueError(x) 
 
def test_pass(x): 
    return x 
 
if __name__=='__main__': 
    print if_error(test_fail, 0, 4) 
    print if_error(test_pass, 0, 5)