【发布时间】:2015-08-07 11:32:20
【问题描述】:
首先,我知道 if 和 try 之间的区别,并且我非常清楚它们的目的是完全不同的——一个进行测试,另一个管理错误。但是,在这种特殊情况下,使用 if 或 try 更好吗?
#option1
def getListRank(self):
for point in self.soup.findAll('td',class_="rank-cell"):
p = (point.get_text().replace('\t','').replace('\n','')
.replace('\r','').replace(',',''))
if 'T' in p:
self.listRk.append(int(p.replace('T',''))
else:
self.listRk.append(int(p))
return self.listRk
我很想使用以下选项 2,因为我知道可以阻止将 p 转换为整数的唯一原因是存在那个“T”。因此,这样写是不寻常还是效率低下:
#option2
def getListRank(self):
for point in self.soup.findAll('td',class_="rank-cell"):
p = (point.get_text().replace('\t','').replace('\n','')
.replace('\r','').replace(',',''))
try:
self.listRk.append(int(p))
except:
self.listRk.append(int(p.replace('T',''))
return self.listRk
我问这些问题是因为我以前读过这个,所以我认为它是“pythonic”。但是,如果有一段解释/约定,我会更感兴趣。
提前致谢
【问题讨论】:
-
如果使用异常处理程序,请不要使用 Pokemon 风格的处理方式;您不想全部抓住。只捕获特定的异常,这里是
except ValueError:。 -
何必呢?如果
'T'不在p中,则p.replace('T','')与p相同 -
@tobias_k 当然可以。这只是举个例子。可能不是最好的,尤其是当我之前使用了这么多替换时。还是谢谢。
-
另外,请确保在
try块中添加尽可能少的内容。因此try: p = int(p); except ValueError: p = int(p.replace('T',''); self.listRk.append(p)会好很多。
标签: python if-statement try-catch convention