else子句不仅在if语句中使用,还可以用在for、while、try中使用,但是没有得到重视,因为和if/else的差别很大,else这个单词的意思阻碍了对特征的理解
for : 仅当for循环正常运行完毕时(即没有被break语句中止)才运行else块。
while :仅当while循环条件为假值而退出时(即没有被break语句中止)才运行else块。
try :仅当try块中没有异常抛出时才运行else块。
在所有情况下,如果异常、return、break、continue语句导致控制权跳到了复合语句的主块之外,else子句也会被跳过。
其实除了if语句之外,其他语句使用else关键字是个错误。
else的含义是“排他性”这层意思:“要么运行这个循环,要么做那件事”,但是在for和while循环中,else的语义正好相反:“运行完这个循环,然后做这件事”
所以根据英文含义,使用then关键字更好,在for、while、try语句中也就说得通:比如在try中“尝试运行这个,然后做这件事”
可是,添加新的关键字属于语言的重大变化,Guido唯恐之不及。
示例,else的简单使用
python">python">for item in my_list:
if item == 'banana':
break
else:
raise ValueError('No banana Found!')
# 示例代码中,dangerous_call()不抛出异常,才会执行after_call()
try:
dangerous_call()
except Exception:
print('Error')
else:
after_call()