AttributeError:

为什么python里要 if __name__ == ‘__main__’:

柔情痞子 提交于 2019-12-21 11:30:03
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 尽管python允许你像shell脚本一样,把大段的代码堆积着写,但是,很多python入门的书,都会建议你把代码写成一个函数,然后在最后面统一调用,例如这样: def main(): #具体代码 if __name__ == '__main__' : main() 很多文章都会说这个是由于代码风格之类的原因,但是其实,不这样写,有时候也是会直接导致出错的。 举个例子,打开《A Byte of Python》的类变量那节,可以 这里看在线版本 ,然后把中间的那示例代码复制下来,运行,可以看到,确实能得到预期正确的结果。 但是,现在把那代码里的所有“swaroop”换成“xxx1”,再把所有“kalam”换成“yyy1”,再运行,就会在程序运行的最后时刻,得到这么一个奇怪的错误(Python 2.6.5下实验): Exception AttributeError: "'NoneType' object has no attribute 'population'" in > ignored 也就是说,换了个变量名,程序就出错了。。。 究其原因,应该是python在最后析构所有类和对象的时候,并没有处理这些对象之间的依赖关系,而是根据变量名来决定某种顺序操作了。从而导致Person类本身,先于yyy2被干掉了