我有一堆语句想要使用try,除了on。是的,糟糕的练习。
一定有一种更具pythonic风格的方式来写下面的内容?
try:
E1=clean_html.find("span",{"class":"range-a"}).text
except AttributeError:
E1=None
try:
E2=clean_html.find("span",{"class":"range-b"}).text
except AttributeError:
E2=None
try:
E3=clean_html.find("span",{"class":"range-c"}).text
except AttributeError:
E3=None
try:
E4=clean_html.find("div",{"class":"Description"}).get_text(separator=" ").strip()
except AttributeError:
E4=None因为这段代码对我来说工作得很好,但它看起来效率很低。
发布于 2021-01-15 07:24:14
您可以编写一个函数来处理try和except。如果希望函数处理在调用post_processing方法时不抛出错误的问题,可以将其作为lambda传递
def get_clean_text(tag, class_name, post_processor):
try:
return post_processor(clean_html.find(tag,{"class": class_name}))
except AttributeError:
return None
E1 = get_clean_text("span", "range-a", lambda o: o.text)
E4 = get_clean_text("div", "Description", lambda o: o.get_text(separator=" ").strip())发布于 2021-01-15 06:11:58
您可以为变量分配一个默认值,然后执行此工作。由于您希望缺省值是不可变的None,因此您可以
E1 = E2 = E3 = E4 = None
try:
E1=clean_html.find("span",{"class":"range-a"}).text
E2=clean_html.find("span",{"class":"range-b"}).text
E3=clean_html.find("span",{"class":"range-c"}).text
E4=clean_html.find("div",{"class":"Description"}).get_text(separator=" ").strip()
except AttributeError:
pass处理异常的最好方法依赖于比我们这里更多的上下文,但通常情况下,您希望编写更大的块,这些块在任何“异常”操作中都保持正常状态。
由于异常需要一些处理能力来设置,并且可能在视觉上不整洁,因此测试(特别是在包装在自己的函数中时)可能是一种更好的方法。
def get_elem_text(elem, default=None):
if elem:
return elem.text
else:
return default
E1=get_elem_text(clean_html.find("span",{"class":"range-a"}))
E2=get_elem_text(clean_html.find("span",{"class":"range-b"}))
E3=get_elem_text(clean_html.find("span",{"class":"range-c"}))
# I don't know what "get_text" is so can't abstract it
#E4=get_elem_text(clean_html.find("div",{"class":"Description"}), default="")).strip()https://stackoverflow.com/questions/65727441
复制相似问题