首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何组合多个try-except块?

如何组合多个try-except块?
EN

Stack Overflow用户
提问于 2021-01-15 05:54:29
回答 2查看 62关注 0票数 0

我有一堆语句想要使用try,除了on。是的,糟糕的练习。

一定有一种更具pythonic风格的方式来写下面的内容?

代码语言:javascript
运行
复制
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

因为这段代码对我来说工作得很好,但它看起来效率很低。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-01-15 07:24:14

您可以编写一个函数来处理try和except。如果希望函数处理在调用post_processing方法时不抛出错误的问题,可以将其作为lambda传递

代码语言:javascript
运行
复制
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())
票数 1
EN

Stack Overflow用户

发布于 2021-01-15 06:11:58

您可以为变量分配一个默认值,然后执行此工作。由于您希望缺省值是不可变的None,因此您可以

代码语言:javascript
运行
复制
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

处理异常的最好方法依赖于比我们这里更多的上下文,但通常情况下,您希望编写更大的块,这些块在任何“异常”操作中都保持正常状态。

由于异常需要一些处理能力来设置,并且可能在视觉上不整洁,因此测试(特别是在包装在自己的函数中时)可能是一种更好的方法。

代码语言:javascript
运行
复制
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()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65727441

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档