博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
为什么python里要 if __name__ == ‘__main__’:
阅读量:6656 次
发布时间:2019-06-25

本文共 790 字,大约阅读时间需要 2 分钟。

  hot3.png

尽管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被干掉了,所以在解构yyy2的时候,执行它的__del__()方法,却发现父类都已经没有了~~
这应该确实算是python解析器的bug,但是,如果那把这个例子里的所有class Person以外的代码,写到一个main()函数里,再通过上述方法调用的话,就不会发生这种错误了。
所以,大家最好还是别太在意多几行代码,养成这个好习惯吧。

要深究此错误的原因,可以看官方文档里的,并在讨论。

转载于:https://my.oschina.net/hkmax/blog/144362

你可能感兴趣的文章
Redhat 5.3 Linux内核的升级!
查看>>
Ubuntu Mate:扩展存储到整张SD卡
查看>>
学习使用clojure(1)
查看>>
EXCEL 2010规划求解基础篇
查看>>
es学习5-slowlog
查看>>
nf_conntrack: table full, dropping packet
查看>>
Linux的五个查找命令:find,locate,whereis,which,type
查看>>
KK课表抓取教务系统
查看>>
mac上如何某端口号被哪些程序占用
查看>>
mac 随记
查看>>
易宝典文章——玩转Office 365中的Exchange Online服务 之二十四 配置垃圾邮件筛选器反垃圾邮件...
查看>>
读写者锁与生产者/消费者模式
查看>>
关于python中的if __name__=='__main__'语句问题
查看>>
节约时间的18种方法
查看>>
Debian下搭建zabbix监控
查看>>
病毒与***的查杀
查看>>
线程组
查看>>
涉密数据的处理
查看>>
我的友情链接
查看>>
【单机实现系列】通过scom2012对Hyper-V主机来监控和邮件报警②
查看>>