零基础入门学习Python(第2版)
上QQ阅读APP看书,第一时间看更新

4.3 避免“悬挂else”问题

什么叫“悬挂else”?

很多编程语言在设计上无法避免这个问题的出现,即使是有多年编程经验的程序员,一不小心仍然是会“中招”的。

请考虑下面的C语言代码:

从这个例子的缩进结构和打印内容可以看出,编程者的本意是:如果age不满足条件(age > 18),就执行else的内容。但事实上程序并不会按照我们的期望去执行,就上面的测试数据而言,程序将直接打印“恭喜,获得青少年组一等奖!”这个字符串,结果与本意相去甚远。

会出现这样的失误,是因为很多语言对于if-else语法都采用“就近匹配”的原则。所以,上面代码的else应该是属于内层的if语句。初学者也好,有多年编程经验的老程序员也罢,常常会在这上面栽跟头,这就是著名的“悬挂else”。

而使用Python开发则没有这方面的顾虑:

前面我们讲过:缩进是Python的灵魂,缩进的严格要求使得Python的代码显得非常精简并且有层次,这种强制的规范使得代码必须被正确地对齐。换言之,也就是让程序员必须在编程的时候就非常确定else是属于哪个if,而不存在模棱两可的情况。限制了选择,从而减少了不确定性,Python鼓励第一次就能写出正确的代码。而且,强制使用正确的缩进,使得Python的代码整洁、易读,这就是地球人都喜欢Python的原因。