有什么办法对付内异常if语句,比其他放一个try,except事先在每行支架周围一大堆,或者测试的例外呢?
例如,假设我有简化的代码:
if a[0] == "a":
return("foo")
elif a[1] == "b":
return("bar")
elif a[5] == "d":
return("bar2")
elif a[2] == "c":
return("bar3")
else:
return("baz")
Run Code Online (Sandbox Code Playgroud)
如果a是word_of_six_characters_or_more,这将很好地工作.如果它是一个较短的单词,则会在该行上引发异常elif a[5] == "d".显然,可以提前测试异常(例如,更改elif a[5] == "d"为elif len(a) >5 and a[5] =="d",然后依赖于第一部分False,因此第二部分从未执行).我的问题是,是否有任何其他方式只是导致exceptions被视为False和进入下一个elif声明而不是抛出异常 - 或者类似地,try except在elif一行中包含子句?
(显然,有可能没有办法,因此得到确认,加入例外的预测试是如何进行将是很好的知道).
(我应该注意,我的代码比上面的代码要复杂得多,虽然我可以进行预检,但是会有相当多的代码,所以只是试着看看是否有更简单的解决方案.)
好吧,有两种方法可以轻松处理这个问题.您可以对单个字符进行切片,如果该字符不存在,该字符将为空.例如,
if a[0:1] == "a":
return("foo")
elif a[1:2] == "b":
return("bar")
elif a[5:6] == "d":
return("bar2")
elif a[2:3] == "c":
return("bar3")
else:
return("baz")
Run Code Online (Sandbox Code Playgroud)
或者,您可以编写一个包装函数来忽略IndexErrors.例如,
def get(obj, index):
try:
return obj[index]
except IndexError:
return
if get(a, 0) == "a":
return("foo")
elif get(a, 1) == "b":
return("bar")
elif get(a, 5) == "d":
return("bar2")
elif get(a, 2) == "c":
return("bar3")
else:
return("baz")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
59 次 |
| 最近记录: |