让我们考虑这个示例代码,该代码返回None
列表中第一个值的索引li
(如果存在),或者如果None
不存在则返回最后一个元素的索引li
。
我可能会检查“无”在列表中,但使用ifs不是首选方法-Dive Into Python鼓励使用异常,因为据说异常会更快并且使代码更干净(请参阅此问题)。因此,我采用了三种方法:
1。
try:
my_index = li.index(None)
except ValueError:
my_index = len(li) - 1
print my_index
my_index
在try / except块中声明。行数少,没有多余的声明。可能的问题-不同的异常类型将导致无法在上创建my_index
脚本并使其崩溃print
。
2。
my_index = None # or anything else
try:
my_index = li.index(None)
except ValueError:
my_index = len(li) - 1
print my_index
my_index
在try / except之前声明,并且分配了一个值,无论发生什么异常。缺点-多行,看起来多余。
3. 编辑:将不起作用-无论try / except结果如何,最终都会执行
try:
my_index = li.index(None)
except ValueError:
my_index = len(li) - 1
finally:
my_index = None # or anything else
print my_index
优点-始终有效(或者至少我认为如此)。缺点-我从未见过有人使用finally
我的整个Python体验,这一定是有原因的。
这些方法中的哪一种被认为是首选和Python方式?也许有更好的解决方案?
try: my_index = li.index(None) except ValueError: my_index = len(li) - 1 print my_index
可能的问题-不同的异常类型将导致无法在上创建
my_index
脚本并使其崩溃
嗯不 如果引发了其他任何异常,则该整个代码块都将中止,因为异常会冒泡直到调用者。因此,如果ValueError
引发任何其他异常类型,print
则将永远不会执行。这是一个相当理智的行为:您处理期望的错误并可以处理,并且让其他错误导致整个块(可能是整个脚本)中止。这是您想要的最简洁的解决方案。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句