所以,让我们举个简单的例子。
private RadioGroup chilledGroup;
public void setChilledFromView()
{
int selectedId = chilledGroup.getCheckedRadioButtonId();
chilledRadioBtn = (RadioButton) getView().findViewById(selectedId);
isChilled = chilledRadioBtn.getText().toString();
if (gender.equals("true")) {
isChilled = "chilled deliver";
} else if (gender.equals("false") {
isChilled = "it is not chilled deliver";
}
}
如您所见,上面的代码有效:
my_list = [
{"name": "toto", "value": 3},
{"name": "foo", "value": 42},
{"name": "bar", "value": 56}
]
def foo(name):
try:
value = next(e["value"] for e in my_list if e["name"] == name)
except StopIteration:
print "Uuuh not found."
else:
if value % 2:
print "Odd !"
else:
print "Even !"
我只是想知道为什么我们不能将>>> foo("toto")
Odd !
>>> foo("foo")
Even !
>>> foo("kappa")
Uuuh not found.
语句与elif
语句一起使用,这是否有特殊原因:
try
当然,这不起作用,因为它在try statement documentation中定义,try:
value = next(e["value"] for e in my_list if e["name"] == name)
except StopIteration:
print "Uuuh not found."
elif value % 2:
print "Odd !"
else:
print "Even !"
语句未定义。但为什么 ?是否有特殊原因(如绑定/未绑定变量)?这有什么消息来源吗?
(旁注:没有elif
标签?)
答案 0 :(得分:8)
如果你问为什么那么python开发者的问题,语法在你链接的docs中明确定义。
除此之外,您尝试做的事情显然都可以在try / except中完成。如果你使用其他属于尝试的尝试与使用带有for循环的else相同,我认为仅使用else并且不允许使用elif
是完全合理的,elif' s是表现得像其他语言中的switch/case
语句。
来自游丝线程的旧帖子Why no 'elif' in try/except?:
因为没有意义?
except子句用于处理异常,else 条款用于处理一切正常的情况。
将两者混合是没有意义的。在一个except子句中,那里 没有结果要考验;在else子句中,有。是elif的假设 在有例外或没有例外情况时执行? 如果它只是else子句的扩展,那么我想它 不会伤害任何东西,但它增加了语言的复杂性 定义。在我生命的这一点上,我倾向于同意爱因斯坦 - 让一切尽可能简单,但并不简单。最后 地方(或至少其中一个最后的地方)我想要额外的 复杂性在于异常处理。
你总是需要至少一个如果使用elif,它只是无效的语法而没有。唯一可能最终没有定义的是value
,你应该在try /中移动逻辑,除非使用if / else:
try:
value = next(e["value"] for e in my_list if e["name"] == name)
if value % 2:
print("Odd !")
else:
print("Even !")
except StopIteration:
print("Uuuh not found.")
如果value = next...
错误导致print("Uuuh not found.")
被执行,如果不是,那么你的if / else将会执行。
您可以拥有多个elif,但必须以if:
开头if something:
...
elif something_else:
....
elif .....
另一种选择是使用默认值next
然后使用if/elif/else
,如果我们没有匹配名称,则会返回None
,所以我们检查if value is not None
,如果是我们是打印"Uuuh not found."
还是我们得到了一个匹配的名字,所以我们去了elif / else:
value = next((e["value"] for e in my_list if e["name"] == name), None)
if value is None:
print("Uuuh not found.")
elif value % 2:
print("Odd !")
else:
print("Even !")