Python 2.7 缩短Python异常处理的表达式
我正在使用Python 2.7 缩短Python异常处理的表达式,python-2.7,xpath,exception-handling,contextmanager,Python 2.7,Xpath,Exception Handling,Contextmanager,我正在使用try/except检查xpath替代源,以便从网站输入变量 它将不得不这样做很多次,所以我正在寻找一种缩短表达式的方法。也许可以使用上下文管理器 在本例中,我正在检查变量issuer和name的两个可选xpath源 try: xpath_issuer = ".//*[@id='dv_PRE88f496c28ad6488895f1ffc383fae8bd_list_list']/div/div[3]/table/tbody/tr[2]/td[2]" find_issue
try
/except
检查xpath
替代源,以便从网站输入变量
它将不得不这样做很多次,所以我正在寻找一种缩短表达式的方法。也许可以使用上下文管理器
在本例中,我正在检查变量issuer
和name
的两个可选xpath源
try:
xpath_issuer = ".//*[@id='dv_PRE88f496c28ad6488895f1ffc383fae8bd_list_list']/div/div[3]/table/tbody/tr[2]/td[2]"
find_issuer = driver.find_element_by_xpath(xpath_issuer)
issuer = re.search(r"(.+)", find_issuer.text).group()
except NoSuchElementException:
pass
try:
xpath_issuer = ".//*[@id='dv_PRE00e883469a264528b20fbbc31b0da4a2_list_list']/div/div[3]/table/tbody/tr[1]/td[2]/a"
find_issuer = driver.find_element_by_xpath(xpath_issuer)
issuer = re.search(r"(.+)", find_issuer.text).group()
except NoSuchElementException:
pass
try:
xpath_name = ".//*[@id='cols']/div[1]/div[1]/h1"
find_name = driver.find_element_by_xpath(xpath_name)
name = re.search(r"(.+)", find_name.text).group()
except NoSuchElementException:
pass
这个怎么样:
listXPath = [".//*[@id='dv_PRE88f496c28ad6488895f1ffc383fae8bd_list_list']/div/div[3]/table/tbody/tr[2]/td[2]", ".//*[@id='dv_PRE00e883469a264528b20fbbc31b0da4a2_list_list']/div/div[3]/table/tbody/tr[1]/td[2]/a", ".//*[@id='cols']/div[1]/div[1]/h1"]
class Work():
def __init__(self):
self.getIssuer()
def getIssuer(self):
for i in range(len(listXPath)):
xPath = listXPath[i]
try:
find_issuer = driver.find_element_by_xpath(xpath_issuer)
issuer = re.search(r"(.+)", find_issuer.text).group()
except:
pass
# Run clas
Work()
对于xpath\u发行者
,您似乎有3个不同的选项,因此您可以循环所有这些选项。然后设置find_issuer
。之后,您可以使用issuer
执行一些操作
也许您可以尝试让issuer
返回一些指示是否找到某些内容的内容。如果您传递了issuer
显然有效,那么执行返回语句
例如:
listXPath = [".//*[@id='dv_PRE88f496c28ad6488895f1ffc383fae8bd_list_list']/div/div[3]/table/tbody/tr[2]/td[2]", ".//*[@id='dv_PRE00e883469a264528b20fbbc31b0da4a2_list_list']/div/div[3]/table/tbody/tr[1]/td[2]/a", ".//*[@id='cols']/div[1]/div[1]/h1"]
class Work():
def __init__(self):
x = self.getIssuer()
print(x)
def getIssuer(self):
for i in range(len(listXPath)):
xPath = listXPath[i]
try:
find_issuer = driver.find_element_by_xpath(xpath_issuer)
issuer = re.search(r"(.+)", find_issuer.text).group()
return 'DoneIt'
except:
pass
# Run clas
Work()
我看到您示例中的第三个是另一个
发行人
。我想我的例子仍然会给你一个想法。你也可以做出两种不同的定义。一个用于发卡机构
,一个用于名称
。我尝试了您的解决方案,但得到了名称错误:未定义全局名称“发卡机构”
。知道为什么吗?当它试图将issuer
从循环中传递出去时,就会发生这种情况。只要它在循环中,它就可以找到颁发者
。它似乎成功地运行了try
,但除了之外,它也总是运行,这会否定所有内容,因此在颁发者
中不会传递任何内容。这是对的吗?我真的不知道issuer
应该做什么?issuer
是我以后要写入csv的变量。它是通过find_issuer
中的re.search
提取出来的,后者又来自xpath。定义一个函数,该函数采用xpath表达式并包含try/except代码,如中所示。当发生NoTouchElementException时,让它返回None。使用三个不同的XPath表达式调用函数三次。。。但如果函数返回的结果不是None,则停止。