コードに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関数にメソッド呼び出しを渡すにはどうすればよいですか?
- 試したラムダが、パラメータ&スープで動作するのに十分理解していませんでした。
- 部分に見えたが、それは美しいスープ方法
- 呼び出す方法表示されませんでしたが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機能に到達する前に発射し続けます。これをどうすれば解決できますか?
あなたはすでにこれを知っているかもしれませんが、裸の 'except'を使うことは、起こりうるすべての問題を捉える危険な練習です。 'if_error'値に変換したい例外を指定する必要があります。 –