![零基础入门学习Python(第2版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/693/27111693/b_27111693.jpg)
上QQ阅读APP看书,第一时间看更新
4.3 避免“悬挂else”问题
什么叫“悬挂else”?
很多编程语言在设计上无法避免这个问题的出现,即使是有多年编程经验的程序员,一不小心仍然是会“中招”的。
请考虑下面的C语言代码:
![](https://epubservercos.yuewen.com/94E0F4/15477656504587806/epubprivate/OEBPS/Images/Figure-P44_69608.jpg?sign=1739293097-wob9t36PVESEMq1zdamTbsDGmiQ6zwJh-0-6948de60f6e8a6d89b11bbe13820b815)
从这个例子的缩进结构和打印内容可以看出,编程者的本意是:如果age不满足条件(age > 18),就执行else的内容。但事实上程序并不会按照我们的期望去执行,就上面的测试数据而言,程序将直接打印“恭喜,获得青少年组一等奖!”这个字符串,结果与本意相去甚远。
会出现这样的失误,是因为很多语言对于if-else语法都采用“就近匹配”的原则。所以,上面代码的else应该是属于内层的if语句。初学者也好,有多年编程经验的老程序员也罢,常常会在这上面栽跟头,这就是著名的“悬挂else”。
而使用Python开发则没有这方面的顾虑:
![](https://epubservercos.yuewen.com/94E0F4/15477656504587806/epubprivate/OEBPS/Images/Figure-P45_69610.jpg?sign=1739293097-nUrKrXpj6FKjnnele1SxOn2ju3NEuYK4-0-7df3226bf96340b43195b8312f16b061)
前面我们讲过:缩进是Python的灵魂,缩进的严格要求使得Python的代码显得非常精简并且有层次,这种强制的规范使得代码必须被正确地对齐。换言之,也就是让程序员必须在编程的时候就非常确定else是属于哪个if,而不存在模棱两可的情况。限制了选择,从而减少了不确定性,Python鼓励第一次就能写出正确的代码。而且,强制使用正确的缩进,使得Python的代码整洁、易读,这就是地球人都喜欢Python的原因。