<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>我学python | experience with the  python language</title><link>http://blog.donews.com/ygao/</link><description>ygao的网络日志 | ygao's blog</description><dc:language>zh-CHS</dc:language><generator>.Text Version 1.0.1.0</generator><item><dc:creator>ygao</dc:creator><title>论web2py的短处</title><link>http://blog.donews.com/ygao/archive/2008/05/16/1291637.aspx</link><pubDate>Fri, 16 May 2008 08:42:00 GMT</pubDate><guid>http://blog.donews.com/ygao/archive/2008/05/16/1291637.aspx</guid><wfw:comment>http://blog.donews.com/ygao/comments/1291637.aspx</wfw:comment><comments>http://blog.donews.com/ygao/archive/2008/05/16/1291637.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.donews.com/ygao/comments/commentRss/1291637.aspx</wfw:commentRss><trackback:ping>http://tb.donews.net/TrackBack.aspx?PostId=1291637</trackback:ping><description>&lt;p&gt;说了好处,短处也一定要说,web2py的最大短处是不能方便支持跨app的复用,虽然有xmlrpc,但我不喜欢这种方式,如果它不能做到这一点,我也就是玩玩而已,不过它适合个人玩,因为简单但又强大.为了打消掉我不满足,我对web2py的核心代码作了改动,虽然作者没明确表态表示好与坏,但我还是会进行下去.曾向limodou提议过一同改造web2py,但他更倾向再造轮子,对他这个轮子,我会给于&lt;a href="http://blog.donews.com/limodou/archive/2008/05/15/1291537.aspx?Pending=true"&gt;关注&lt;/a&gt;,不过同时我要进行web2py的app复用,测试链接如下,如果你感兴趣,可以试一试,链接在我的本机上,如果我上线,一般会开.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://fullip.3322.org/welcome/default/index/4"&gt;http://fullip.3322.org/welcome/default/index/4&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;如果你不懂web2py架构,你不会了解我在说什么&lt;img src ="http://blog.donews.com/ygao/aggbug/1291637.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>ygao</dc:creator><title>再论web2py</title><link>http://blog.donews.com/ygao/archive/2008/04/02/1272140.aspx</link><pubDate>Wed, 02 Apr 2008 11:42:00 GMT</pubDate><guid>http://blog.donews.com/ygao/archive/2008/04/02/1272140.aspx</guid><wfw:comment>http://blog.donews.com/ygao/comments/1272140.aspx</wfw:comment><comments>http://blog.donews.com/ygao/archive/2008/04/02/1272140.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.donews.com/ygao/comments/commentRss/1272140.aspx</wfw:commentRss><trackback:ping>http://tb.donews.net/TrackBack.aspx?PostId=1272140</trackback:ping><description>&lt;p&gt;无论是python的django还是其它的web框架，与web2py比较起来，都不算创新，web2py的创新在功能上最大的要算是错误可以管理，它不象其它的框架把出现的错误都丢掉，注意它是可以管理这些错误的，可以把错误保存下来，以后可以再现它．总的来说它还太年轻，还没有一个能用的界面．&lt;/p&gt;
&lt;p&gt;web2py大量使用'exec'来执行模块，这带来的一个问题，它需要反复读磁盘，即使是编译为.pyc文件仍然如此，我认为在并发下这会是一个io的问题，当然它的开发者不认为这是一个问题，不管怎样这或多或少都会有影响的，只不过是大小的问题，但量变很有可能导致质变，不过我部分的解决了这个问题，注意不是用cache，它仍会随时反映后端数据库的变化，所以这个关于性能的问题不再算是一个问题，代码稳定性还在测试．&lt;/p&gt;
&lt;p&gt;web2py对开发者友好，不是一般的友好，是相当的友好，理解它很容易，使用它也很容易，所以强烈建议一个想接触python框架的学习者来说，它应该是你的第一个框架，不要一开始就学django或TG 或pylon．&lt;/p&gt;&lt;img src ="http://blog.donews.com/ygao/aggbug/1272140.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>ygao</dc:creator><title>web2py使用wxpyshell</title><link>http://blog.donews.com/ygao/archive/2008/03/16/1264213.aspx</link><pubDate>Sun, 16 Mar 2008 22:13:00 GMT</pubDate><guid>http://blog.donews.com/ygao/archive/2008/03/16/1264213.aspx</guid><wfw:comment>http://blog.donews.com/ygao/comments/1264213.aspx</wfw:comment><comments>http://blog.donews.com/ygao/archive/2008/03/16/1264213.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://blog.donews.com/ygao/comments/commentRss/1264213.aspx</wfw:commentRss><trackback:ping>http://tb.donews.net/TrackBack.aspx?PostId=1264213</trackback:ping><description>&lt;p&gt;我都有点不敢相信．看图：各种东西都不缺．&lt;/p&gt;
&lt;p&gt;&lt;img alt="" src="X:\web2py1.png" /&gt;&lt;/p&gt;&lt;img src ="http://blog.donews.com/ygao/aggbug/1264213.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>ygao</dc:creator><title>关于web2py的片段想法</title><link>http://blog.donews.com/ygao/archive/2008/03/16/1264008.aspx</link><pubDate>Sun, 16 Mar 2008 15:18:00 GMT</pubDate><guid>http://blog.donews.com/ygao/archive/2008/03/16/1264008.aspx</guid><wfw:comment>http://blog.donews.com/ygao/comments/1264008.aspx</wfw:comment><comments>http://blog.donews.com/ygao/archive/2008/03/16/1264008.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.donews.com/ygao/comments/commentRss/1264008.aspx</wfw:commentRss><trackback:ping>http://tb.donews.net/TrackBack.aspx?PostId=1264008</trackback:ping><description>&lt;p&gt;以前反对过django，但没有拿出替代品，所以反对无效，这回拿出另外一个框架来说事吧．不想作全面的比较，只想说说个人的感受，与diango相比，没有配置,当然更不会有安装一说. 没有所谓的中间件,没有写个url,就必然要写正则表达式， 也没有所谓的哲学, 更没有所谓的条条框框，可能django复杂，我看不懂或是不全懂，&lt;/p&gt;
&lt;p&gt;web2py理解容易，当然框架理解容易的多了，但是这个框架对开发者友好，给我的感觉可能是如此．limodou&lt;/p&gt;
&lt;p&gt;写过一个shell.py用于测试model代码，但我觉得可以更进一步，不需写这个shell.py，可以更进一步，直接在web上面写个界面出来，岂不更好，初试完成，不想再写了，以后再完善它吧．&lt;img alt="" src="X:\web2py.png" /&gt;&lt;br /&gt;&lt;/p&gt;&lt;img src ="http://blog.donews.com/ygao/aggbug/1264008.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>ygao</dc:creator><title>ulipad分支版本的document show窗口的开发</title><link>http://blog.donews.com/ygao/archive/2008/01/19/1247564.aspx</link><pubDate>Sat, 19 Jan 2008 13:06:00 GMT</pubDate><guid>http://blog.donews.com/ygao/archive/2008/01/19/1247564.aspx</guid><wfw:comment>http://blog.donews.com/ygao/comments/1247564.aspx</wfw:comment><comments>http://blog.donews.com/ygao/archive/2008/01/19/1247564.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.donews.com/ygao/comments/commentRss/1247564.aspx</wfw:commentRss><trackback:ping>http://tb.donews.net/TrackBack.aspx?PostId=1247564</trackback:ping><description>&lt;p&gt;&lt;font size="4"&gt;在这个分支版本中，我开发了document show窗口，它是编辑器右边的一部分，我去除了弹出式的calltip的窗口，这样做的好处是，可以一直写程序，不受弹出式的窗口的干扰，另外就是它能随着你光标在文档内的移动而显现相应的文档，无论你是正在程序还是正在浏览程序，它可以随时随地的显现相关代码的文档，它与自动完成功能使用了同一线程技术．&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size="4"&gt;目前这个功能只在分支版本中，不在发行版或主版本中．&lt;img alt="" src="X:\hack3.png" /&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size="4"&gt;&lt;/font&gt;&lt;/p&gt;&lt;img src ="http://blog.donews.com/ygao/aggbug/1247564.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>ygao</dc:creator><title>在ulipad中为何以Import.py文件出现的错误最多？如何处理？</title><link>http://blog.donews.com/ygao/archive/2008/01/19/1247561.aspx</link><pubDate>Sat, 19 Jan 2008 12:41:00 GMT</pubDate><guid>http://blog.donews.com/ygao/archive/2008/01/19/1247561.aspx</guid><wfw:comment>http://blog.donews.com/ygao/comments/1247561.aspx</wfw:comment><comments>http://blog.donews.com/ygao/archive/2008/01/19/1247561.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.donews.com/ygao/comments/commentRss/1247561.aspx</wfw:commentRss><trackback:ping>http://tb.donews.net/TrackBack.aspx?PostId=1247561</trackback:ping><description>&lt;p&gt;ulipad产生错误时，会把错写入自身目录下error.txt中，这时你就发现经常是Import.py文件最多，这个在ulipad的中/minixs的文件，而且这个文件有几千行，看这个文件，只怕把你的眼睛都看花了．其实这个文件是在同目录下的__init__.py中记录的以#mXXXXXXXX.py的所有文件的一个映射，这个使用只是为了加快启动的速度，但如果发生错误只会指示这个文件本身发生错误，而不会指示某个mXXXXXX.py发生错误，而实际上是mXXXXXX.py文件真正错误，看Import.py文件的错误我想除了limodou没有人能看懂吧．我也不例外，如果才能让error.txt错误直接指示mXXXXXX.py文件呢？使用我写的/tools/目录下的rundev.py来运行ulipad，这时发生的错误在error.txt的指示中会直接指向mXXXXXX.py文件，这个文件通常很小，也容易读，如果你直接修改这个文件，再运行ulipad.py或ulipad.pyw程序，在error．txt中会直接指向你修改的位置，如果发生错误的话．&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&lt;img src ="http://blog.donews.com/ygao/aggbug/1247561.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>ygao</dc:creator><title>有幸成为ulipad的一名开发者</title><link>http://blog.donews.com/ygao/archive/2008/01/17/1246900.aspx</link><pubDate>Thu, 17 Jan 2008 09:27:00 GMT</pubDate><guid>http://blog.donews.com/ygao/archive/2008/01/17/1246900.aspx</guid><wfw:comment>http://blog.donews.com/ygao/comments/1246900.aspx</wfw:comment><comments>http://blog.donews.com/ygao/archive/2008/01/17/1246900.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.donews.com/ygao/comments/commentRss/1246900.aspx</wfw:commentRss><trackback:ping>http://tb.donews.net/TrackBack.aspx?PostId=1246900</trackback:ping><description>&lt;p&gt;&lt;font size="4"&gt;很久没有写blog，现在来补一下吧。这件事没有想那么多，一个很偶然的原因，起因于我同limodou的一次交流，征得lomodou同意，我在维护一个ulipad的分支版本，关于事件的过程，limodou的blog有记录：&lt;/font&gt;&lt;a href="http://blog.donews.com/limodou/archive/2008/01/08/1244278.aspx"&gt;&lt;font color="#0000ff" size="4"&gt;[UliPad]感谢ygao成为ulipad的一名开发者&lt;/font&gt;&lt;/a&gt;&lt;font size="4"&gt;。&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size="4"&gt;这个分支的代码库路径是：&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://ulipad.googlecode.com/svn/branches/new_functions_test"&gt;http://ulipad.googlecode.com/svn/branches/new_functions_test&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;fon&lt;img src ="http://blog.donews.com/ygao/aggbug/1246900.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>ygao</dc:creator><title>完成reload mixin的功能</title><link>http://blog.donews.com/ygao/archive/2007/04/09/1152879.aspx</link><pubDate>Mon, 09 Apr 2007 12:18:00 GMT</pubDate><guid>http://blog.donews.com/ygao/archive/2007/04/09/1152879.aspx</guid><wfw:comment>http://blog.donews.com/ygao/comments/1152879.aspx</wfw:comment><comments>http://blog.donews.com/ygao/archive/2007/04/09/1152879.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.donews.com/ygao/comments/commentRss/1152879.aspx</wfw:commentRss><trackback:ping>http://tb.donews.net/TrackBack.aspx?PostId=1152879</trackback:ping><description>reload mixis功能使你在运行ulipad的时候，你就可以为它开发功能，简单地说，写源程序的时候写完功能就可以出来，
因为ulipad大量的运用mixin技术，这是可能的，但这在其它的python程序难以做到，夸张一点的地说，你甚至可以&amp;quot;热修复&amp;quot;。
使用要点：你可以打开ulipad重载mixin功能，当然你也可以不使用它而使用原先的模式，通过工具菜单的reload mixin来完成。
有可能，你写的功能错误，重载后当然不能正常工作，所以建议你复制一份ulipad的目录，通过tools目录下的run.bat运行一个实例，
rundev.bat运行reload mixin功能的版本另一个实例，发生错误时，只要改正就行了！&lt;img src ="http://blog.donews.com/ygao/aggbug/1152879.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>ygao</dc:creator><title>为Ulipad作小小的贡献</title><link>http://blog.donews.com/ygao/archive/2007/03/11/1138837.aspx</link><pubDate>Sun, 11 Mar 2007 17:51:00 GMT</pubDate><guid>http://blog.donews.com/ygao/archive/2007/03/11/1138837.aspx</guid><wfw:comment>http://blog.donews.com/ygao/comments/1138837.aspx</wfw:comment><comments>http://blog.donews.com/ygao/archive/2007/03/11/1138837.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://blog.donews.com/ygao/comments/commentRss/1138837.aspx</wfw:commentRss><trackback:ping>http://tb.donews.net/TrackBack.aspx?PostId=1138837</trackback:ping><description>&lt;P&gt;最先我是在学python的过程中，想找一个项目练练手，最后我找到了&lt;A title="Boa Constructor" href="http://boa-constructor.sourceforge.net/"&gt;Boa Constructor&lt;/A&gt;.后来一发不可收拾，我觉得有些地方，要改改，就不断地增强了它，把我所看到python实现的editor中好代码都加了进去。Ulipad当然也不能例外，当它实现了强大的自动完成的功能时，给了我很深的印象，我就把它的mixin技术移植到了&lt;A title="Boa Constructor" href="http://boa-constructor.sourceforge.net/"&gt;Boa Constructor&lt;/A&gt;。我发现的一些关于自动完成的bug及我所做的增强，最先是在&lt;A title="Boa Constructor" href="http://boa-constructor.sourceforge.net/"&gt;Boa Constructor&lt;/A&gt;中实现的，后来又把这些提交到了Ulipad的作者：limodou。在Ulipad的邮件列表中，我说focus lost的bug在那里，他说在别处，紧跟着他又说我是对的，接着为了修复此处的bug和另外某处的bug,他重新实现了一小段代码，这段代码他以前用过，是在程序空闲时调用处理bug，这样一来这段代码会反复运行。他要重起用这段代段时，我说了自己的意见，我说是notebook的控件吞吃了kill focus的消息的传递。按“ctrl+tab”键时，focus　lost传递的问题在Boa中不存在，这些我也说了，他还是起用了那段代码，为了验证我的想法，修复这个bug，我在Ulipad的源代码插入了5行代码，这个bug就不再出现了。我想我的方案简单的多而且有效，修复了 focus　lost的传递的问题。关于函数及class参数的自动完成功能，我所做的增强patch，起先他要想一想更好的，后来我强调说只要5行代码就能用了，是的，它简单得不能再简单了，后来就加入到svn中了。当然他的想法可能更好（见邮件列表），但毕竟还未实现。后来相互交流了一下，我说了一些关于Ulipad的看法，他问了我一些patch的原由，最后是什么样子，对新功能感兴趣的直接去svn&amp;nbsp; r2013 中看吧。两个各自有不同想法的人，否定，肯定，再否定......，想要把一件事情作好，就是这样一个过程。&lt;/P&gt;
&lt;P&gt;　　至今Ulipad的源代码有些部分没看懂，我想是我能力有限，另外我要说的是，在源代码的注释及doc_string相对较少，很精练，有些地方恰到好处，有些就没有了，有种惜“注释”如金的感觉。这对于后来者及二次开发者都相对不利，不看完全部的代码，贸然下手，很不利。比如我正在实现的reload mixins的功能就是这样。有一行开关代码，我以为不重要，因为程序没有强调何时调用，我也没有仔细看，结果后来bug就找到此处了。&lt;/P&gt;
&lt;P&gt;　　有了reload mixins的功能，Ulipad以前的缺点，现在可以说是一种优点了，要重载类就不太容易，但分而治之重载部分功能，那就容易了，而且只要是应用了mixin技术的代码，天生就有了源代码改变，就自动应用它。由于后来Ulipad的一些功能，全都是建立在mixin中的，所以好处不言而喻，现在开发Ulipad，就相当有趣了，不再是重启动再启动，你只需保存，触发，瞬间就可看到结果。甚至你只需写好其本的框架代码（就是Mxxxxx.py文件），实现部分只需等待填入、保存、再写、再保存.....，写完了，功能就出来了。&lt;/P&gt;&lt;img src ="http://blog.donews.com/ygao/aggbug/1138837.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>ygao</dc:creator><title>svn or perforce 如何选配置管理工具?</title><link>http://blog.donews.com/ygao/archive/2006/12/19/1098774.aspx</link><pubDate>Tue, 19 Dec 2006 10:39:00 GMT</pubDate><guid>http://blog.donews.com/ygao/archive/2006/12/19/1098774.aspx</guid><wfw:comment>http://blog.donews.com/ygao/comments/1098774.aspx</wfw:comment><comments>http://blog.donews.com/ygao/archive/2006/12/19/1098774.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.donews.com/ygao/comments/commentRss/1098774.aspx</wfw:commentRss><trackback:ping>http://tb.donews.net/TrackBack.aspx?PostId=1098774</trackback:ping><description>&lt;P&gt;Jolt大奖拥有“软件业界的奥斯卡”之称,svn和preforce都曾获得过。&lt;/P&gt;
&lt;P&gt;SVN应该说是CVS成功的继承者，把CVS的缺陷全都克服了。在扩展boa过程，我使用了SVN。随着增加的功能越来越多，我自己都不知道做过哪些改动了。虽然可以在SVN可以查看，可是我用的客户端tortoiseSVN，一个功能就搞一个进程，受不了，一些java的客户端如有类似Tmate一些功能，就非常好用，自此我觉得SVN的功能有受限。接着就使用了perforce，不过除了官方的文档外，很少能找到其它的使用介绍。用惯了SVN，难以学perforce，好在坚持了下来。&lt;/P&gt;
&lt;P&gt;perforce很不错，能满足我的要求，功能很贴心，难怪在google的guido要使用perforce做代码预览系统。perforce的主页有与SVN比较的文章。&lt;A href="http://www.perforce.com/perforce/comparisons/perforce_subversion.pdf"&gt;perforce_subversion.pdf&lt;/A&gt;&lt;/P&gt;&lt;img src ="http://blog.donews.com/ygao/aggbug/1098774.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>ygao</dc:creator><title>python文档和代码的分与合兼谈leo的文学化编程</title><link>http://blog.donews.com/ygao/archive/2006/12/13/1095642.aspx</link><pubDate>Wed, 13 Dec 2006 16:33:00 GMT</pubDate><guid>http://blog.donews.com/ygao/archive/2006/12/13/1095642.aspx</guid><wfw:comment>http://blog.donews.com/ygao/comments/1095642.aspx</wfw:comment><comments>http://blog.donews.com/ygao/archive/2006/12/13/1095642.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://blog.donews.com/ygao/comments/commentRss/1095642.aspx</wfw:commentRss><trackback:ping>http://tb.donews.net/TrackBack.aspx?PostId=1095642</trackback:ping><description>&lt;P&gt;前面我搞了一个项目，不过那个项目是空的，因为我想一个得当的工具，用来支持这个项目，&lt;/P&gt;
&lt;P&gt;一直在着手这个工具，到现在也没让我满意。&lt;/P&gt;
&lt;P&gt;借助于leo，我轻松地实现了文档和代码的分离。试用了一下leo，leo所谓的文学化编程不过是把一段文本结构化，以树形节点的方式再组织文档。leo中的节点不存在固定的子节点和父节点的关系。它的节点高度的灵活，任何时候都可以改变树形的结构的关系，它的核心思想把文档节点化，使得大纲式编程（或文学式编程）成为可能。leo的功能相当强大，但它好象受制于TK的UI的表现力。&lt;/P&gt;
&lt;P&gt;我一直想让代码和文档有高度的灵活性，很多人也尝试过这样做。文档写完了，文中的代码也就完成了，但对于文档和代码的维护也不再继续。因些写文档（教程）每个人都要重新再来写一遍，因为没有高度自动化的工具，不能用来反映阅读者和写作者对文档和代码的把握能力。因此我用leo的大纲式编程和我扩展之后的boa，搞出了这样一个原型。代码和文档的分与合能自动化，能随时组合和分离，具有演进的能力。&lt;/P&gt;
&lt;P&gt; &lt;/P&gt;&lt;img src ="http://blog.donews.com/ygao/aggbug/1095642.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>ygao</dc:creator><title>wxpython中的pyshell的小问题</title><link>http://blog.donews.com/ygao/archive/2006/11/04/1072327.aspx</link><pubDate>Sat, 04 Nov 2006 13:17:00 GMT</pubDate><guid>http://blog.donews.com/ygao/archive/2006/11/04/1072327.aspx</guid><wfw:comment>http://blog.donews.com/ygao/comments/1072327.aspx</wfw:comment><comments>http://blog.donews.com/ygao/archive/2006/11/04/1072327.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.donews.com/ygao/comments/commentRss/1072327.aspx</wfw:commentRss><trackback:ping>http://tb.donews.net/TrackBack.aspx?PostId=1072327</trackback:ping><description>&lt;pre&gt;&lt;p&gt;&lt;font size="4"&gt;&lt;font face="Times New Roman"&gt;一位叫孙骏朋友突然问我，下面的这段代码，在pyshell中运行时不能实时的显示出结果，&lt;/font&gt;&lt;font face="Times New Roman"&gt;而在其它的shell环境下，如pythonwin中可以实时显示。如果你在此环境中测试线程，问题就更明显了。&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Times New Roman" size="4"&gt;代码如下：&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;pre&gt;&lt;font size="4"&gt;&lt;span style="FONT-WEIGHT: bold; COLOR: #ff7700"&gt;import&lt;/span&gt; &lt;span style="FONT-WEIGHT: bold; COLOR: #000000"&gt;time&lt;/span&gt;&lt;br /&gt;&lt;span style="FONT-WEIGHT: bold; COLOR: #ff7700"&gt;for&lt;/span&gt; &lt;span style="FONT-WEIGHT: bold; COLOR: #000000"&gt;i&lt;/span&gt; &lt;span style="FONT-WEIGHT: bold; COLOR: #ff7700"&gt;in&lt;/span&gt; &lt;span style="FONT-WEIGHT: bold; COLOR: #000000"&gt;range&lt;/span&gt;&lt;span style="FONT-WEIGHT: bold; COLOR: #0000c0"&gt;(&lt;/span&gt;&lt;span style="FONT-WEIGHT: bold; COLOR: #0080c0"&gt;5&lt;/span&gt;&lt;span style="FONT-WEIGHT: bold; COLOR: #0000c0"&gt;)&lt;/span&gt;&lt;span style="FONT-WEIGHT: bold; COLOR: #0000c0"&gt;:&lt;/span&gt;&lt;br /&gt;   &lt;span style="FONT-WEIGHT: bold; COLOR: #ff7700"&gt;print&lt;/span&gt; &lt;span style="FONT-WEIGHT: bold; COLOR: #000000"&gt;i&lt;/span&gt;&lt;br /&gt;   &lt;span style="FONT-WEIGHT: bold; COLOR: #ff7700"&gt;print&lt;/span&gt; &lt;span style="FONT-WEIGHT: bold; COLOR: #000000"&gt;time&lt;/span&gt;&lt;span style="FONT-WEIGHT: bold; COLOR: #0000c0"&gt;.&lt;/span&gt;&lt;span style="FONT-WEIGHT: bold; COLOR: #000000"&gt;ctime&lt;/span&gt;&lt;span style="FONT-WEIGHT: bold; COLOR: #0000c0"&gt;(&lt;/span&gt;&lt;span style="FONT-WEIGHT: bold; COLOR: #0000c0"&gt;)&lt;/span&gt;&lt;br /&gt;   &lt;span style="FONT-WEIGHT: bold; COLOR: #000000"&gt;time&lt;/span&gt;&lt;span style="FONT-WEIGHT: bold; COLOR: #0000c0"&gt;.&lt;/span&gt;&lt;span style="FONT-WEIGHT: bold; COLOR: #000000"&gt;sleep&lt;/span&gt;&lt;span style="FONT-WEIGHT: bold; COLOR: #0000c0"&gt;(&lt;/span&gt;&lt;span style="FONT-WEIGHT: bold; COLOR: #0080c0"&gt;1&lt;/span&gt;&lt;span style="FONT-WEIGHT: bold; COLOR: #0000c0"&gt;)&lt;/span&gt;&lt;span style="FONT-WEIGHT: bold; COLOR: #000000"&gt;&lt;/span&gt;&lt;/font&gt;&lt;/pre&gt;
&lt;/pre&gt;
&lt;pre&gt;&lt;font color="#0000c0" size="4"&gt;&lt;/font&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;font face="Lucida,Courier New"&gt;&lt;font size="4"&gt;结果如下：&lt;font color="#000000"&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;
&lt;p&gt;&lt;font size="4"&gt;0&lt;br /&gt;Sat Nov 04 12:52:08 2006&lt;br /&gt;1&lt;br /&gt;Sat Nov 04 12:52:09 2006&lt;br /&gt;2&lt;br /&gt;Sat Nov 04 12:52:10 2006&lt;br /&gt;3&lt;br /&gt;Sat Nov 04 12:52:11 2006&lt;br /&gt;4&lt;br /&gt;Sat Nov 04 12:52:12 2006&lt;/font&gt;&lt;/p&gt;
&lt;pre&gt;&lt;font size="4"&gt;在wxpython的pyshell不能实时逐行显示结果。&lt;/font&gt;&lt;font size="4"&gt;我测试了一下，确实如此。我想结果有点怪，不应如此。&lt;/font&gt;&lt;/pre&gt;
&lt;pre lang="utf-8"&gt;&lt;font size="4"&gt;看了一下pyshell的代码，&lt;/font&gt;&lt;font size="4"&gt;在shell.py中加如下的代码就可以解决问题了。&lt;/font&gt;&lt;/pre&gt;
&lt;pre lang="utf-8"&gt;&lt;font size="4"&gt;&lt;/font&gt;&lt;/pre&gt;
&lt;pre lang="utf-8"&gt;&lt;pre&gt;&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;pre&gt;&lt;font size="4"&gt;&lt;span style="FONT-WEIGHT: bold; COLOR: #ff7700"&gt;def&lt;/span&gt; &lt;span style="FONT-WEIGHT: bold; COLOR: #0000ff"&gt;write&lt;/span&gt;&lt;span style="FONT-WEIGHT: bold; COLOR: #0000c0"&gt;(&lt;/span&gt;&lt;span style="FONT-WEIGHT: bold; COLOR: #ff7700"&gt;self&lt;/span&gt;&lt;span style="FONT-WEIGHT: bold; COLOR: #0000c0"&gt;,&lt;/span&gt; &lt;span style="FONT-WEIGHT: bold; COLOR: #000000"&gt;text&lt;/span&gt;&lt;span style="FONT-WEIGHT: bold; COLOR: #0000c0"&gt;)&lt;/span&gt;&lt;span style="FONT-WEIGHT: bold; COLOR: #0000c0"&gt;:&lt;/span&gt;&lt;br /&gt;    &lt;/font&gt;&lt;font size="4"&gt;&lt;span style="FONT-WEIGHT: bold; COLOR: #804000"&gt;&amp;quot;&amp;quot;&amp;quot;Display text in the shell.&lt;br /&gt;&lt;br /&gt;    Replace line endings with OS-specific endings.&amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;&lt;br /&gt;    &lt;span style="FONT-WEIGHT: bold; COLOR: #000000"&gt;text&lt;/span&gt; &lt;span style="FONT-WEIGHT: bold; COLOR: #0000c0"&gt;=&lt;/span&gt; &lt;span style="FONT-WEIGHT: bold; COLOR: #ff7700"&gt;self&lt;/span&gt;&lt;span style="FONT-WEIGHT: bold; COLOR: #0000c0"&gt;.&lt;/span&gt;&lt;span style="FONT-WEIGHT: bold; COLOR: #000000"&gt;fixLineEndings&lt;/span&gt;&lt;span style="FONT-WEIGHT: bold; COLOR: #0000c0"&gt;(&lt;/span&gt;&lt;span style="FONT-WEIGHT: bold; COLOR: #000000"&gt;text&lt;/span&gt;&lt;span style="FONT-WEIGHT: bold; COLOR: #0000c0"&gt;)&lt;/span&gt;&lt;br /&gt;    &lt;span style="FONT-WEIGHT: bold; COLOR: #ff7700"&gt;self&lt;/span&gt;&lt;span style="FONT-WEIGHT: bold; COLOR: #0000c0"&gt;.&lt;/span&gt;&lt;span style="FONT-WEIGHT: bold; COLOR: #000000"&gt;AddText&lt;/span&gt;&lt;span style="FONT-WEIGHT: bold; COLOR: #0000c0"&gt;(&lt;/span&gt;&lt;span style="FONT-WEIGHT: bold; COLOR: #000000"&gt;text&lt;/span&gt;&lt;span style="FONT-WEIGHT: bold; COLOR: #0000c0"&gt;)&lt;/span&gt;&lt;br /&gt;    &lt;span style="FONT-WEIGHT: bold; COLOR: #ff7700"&gt;self&lt;/span&gt;&lt;span style="FONT-WEIGHT: bold; COLOR: #0000c0"&gt;.&lt;/span&gt;&lt;span style="FONT-WEIGHT: bold; COLOR: #000000"&gt;Refresh&lt;/span&gt;&lt;span style="FONT-WEIGHT: bold; COLOR: #0000c0"&gt;(&lt;/span&gt;&lt;span style="FONT-WEIGHT: bold; COLOR: #0000c0"&gt;)&lt;/span&gt;&lt;span style="FONT-WEIGHT: bold; COLOR: #008000"&gt;#add&lt;/span&gt;&lt;br /&gt;    &lt;span style="FONT-WEIGHT: bold; COLOR: #ff7700"&gt;self&lt;/span&gt;&lt;span style="FONT-WEIGHT: bold; COLOR: #0000c0"&gt;.&lt;/span&gt;&lt;span style="FONT-WEIGHT: bold; COLOR: #000000"&gt;Update&lt;/span&gt;&lt;span style="FONT-WEIGHT: bold; COLOR: #0000c0"&gt;(&lt;/span&gt;&lt;span style="FONT-WEIGHT: bold; COLOR: #0000c0"&gt;)&lt;/span&gt;&lt;span style="FONT-WEIGHT: bold; COLOR: #008000"&gt;#add&lt;/span&gt;&lt;br /&gt;    &lt;span style="FONT-WEIGHT: bold; COLOR: #ff7700"&gt;self&lt;/span&gt;&lt;span style="FONT-WEIGHT: bold; COLOR: #0000c0"&gt;.&lt;/span&gt;&lt;span style="FONT-WEIGHT: bold; COLOR: #000000"&gt;EnsureCaretVisible&lt;/span&gt;&lt;span style="FONT-WEIGHT: bold; COLOR: #0000c0"&gt;(&lt;/span&gt;&lt;span style="FONT-WEIGHT: bold; COLOR: #0000c0"&gt;)&lt;/span&gt;&lt;span style="FONT-WEIGHT: bold; COLOR: #000000"&gt;&lt;/span&gt;&lt;/font&gt;&lt;/pre&gt;
&lt;/pre&gt;
&lt;/pre&gt;
&lt;/pre&gt;
&lt;/pre&gt;&lt;img src ="http://blog.donews.com/ygao/aggbug/1072327.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>ygao</dc:creator><title>python类的作用域的问题－－有趣的现象</title><link>http://blog.donews.com/ygao/archive/2006/09/27/1048251.aspx</link><pubDate>Wed, 27 Sep 2006 12:24:00 GMT</pubDate><guid>http://blog.donews.com/ygao/archive/2006/09/27/1048251.aspx</guid><wfw:comment>http://blog.donews.com/ygao/comments/1048251.aspx</wfw:comment><comments>http://blog.donews.com/ygao/archive/2006/09/27/1048251.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.donews.com/ygao/comments/commentRss/1048251.aspx</wfw:commentRss><trackback:ping>http://tb.donews.net/TrackBack.aspx?PostId=1048251</trackback:ping><description>&lt;pre&gt;&lt;font style="BACKGROUND-COLOR: #ffffff" color="#000000" size="4"&gt;&lt;strong&gt;这是limodou的ulipad的Debug.py模块，独立运行此模块，会出现异常。&lt;br /&gt;&lt;/strong&gt;&lt;/font&gt;&lt;strong&gt;&lt;font style="BACKGROUND-COLOR: #ffffff" color="#000000" size="4"&gt;试图改正它后，又有一个错误。&lt;br /&gt;类有属性和方法作用域的问题，还有初始化先后作用域的问题。一般我们很少碰到这样的问题。&lt;br /&gt;&lt;br /&gt;声明一下：模块中出现的问题无损于程序的优秀性。这也是我要全文张贴的原因&lt;/font&gt;&lt;/strong&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;font color="#008000"&gt;#   Programmer: limodou&lt;br /&gt;&lt;/font&gt;&lt;font color="#008000"&gt;#   E-mail:     limodou@gmail.com&lt;br /&gt;&lt;/font&gt;&lt;font color="#008000"&gt;#&lt;br /&gt;&lt;/font&gt;&lt;font color="#008000"&gt;#   Copyleft 2006 limodou&lt;br /&gt;&lt;/font&gt;&lt;font color="#008000"&gt;#&lt;br /&gt;&lt;/font&gt;&lt;font color="#008000"&gt;#   Distributed under the terms of the GPL (GNU Public License)&lt;br /&gt;&lt;/font&gt;&lt;font color="#008000"&gt;#&lt;br /&gt;&lt;/font&gt;&lt;font color="#008000"&gt;#   UliPad is free software; you can redistribute it and/or modify&lt;br /&gt;&lt;/font&gt;&lt;font color="#008000"&gt;#   it under the terms of the GNU General Public License as published by&lt;br /&gt;&lt;/font&gt;&lt;font color="#008000"&gt;#   the Free Software Foundation; either version 2 of the License, or&lt;br /&gt;&lt;/font&gt;&lt;font color="#008000"&gt;#   (at your option) any later version.&lt;br /&gt;&lt;/font&gt;&lt;font color="#008000"&gt;#&lt;br /&gt;&lt;/font&gt;&lt;font color="#008000"&gt;#   This program is distributed in the hope that it will be useful,&lt;br /&gt;&lt;/font&gt;&lt;font color="#008000"&gt;#   but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;&lt;/font&gt;&lt;font color="#008000"&gt;#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;&lt;/font&gt;&lt;font color="#008000"&gt;#   GNU General Public License for more details.&lt;br /&gt;&lt;/font&gt;&lt;font color="#008000"&gt;#&lt;br /&gt;&lt;/font&gt;&lt;font color="#008000"&gt;#   You should have received a copy of the GNU General Public License&lt;br /&gt;&lt;/font&gt;&lt;font color="#008000"&gt;#   along with this program; if not, write to the Free Software&lt;br /&gt;&lt;/font&gt;&lt;font color="#008000"&gt;#   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA&lt;br /&gt;&lt;/font&gt;&lt;font color="#008000"&gt;#&lt;br /&gt;&lt;/font&gt;&lt;font color="#008000"&gt;#   $Id: Debug.py 1504 2006-09-02 04:08:43Z limodou $&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#000000"&gt;DEBUG&lt;/font&gt; &lt;font color="#0000c0"&gt;=&lt;/font&gt; &lt;font color="#ff7700"&gt;&lt;strong&gt;True&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff7700"&gt;&lt;strong&gt;import&lt;/strong&gt;&lt;/font&gt; &lt;font color="#000000"&gt;types&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff7700"&gt;&lt;strong&gt;import&lt;/strong&gt;&lt;/font&gt; &lt;font color="#000000"&gt;sys&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff7700"&gt;&lt;strong&gt;import&lt;/strong&gt;&lt;/font&gt; &lt;font color="#000000"&gt;traceback&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff7700"&gt;&lt;strong&gt;import&lt;/strong&gt;&lt;/font&gt; &lt;font color="#000000"&gt;time&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff7700"&gt;&lt;strong&gt;import&lt;/strong&gt;&lt;/font&gt; &lt;font color="#000000"&gt;os&lt;/font&gt;&lt;font color="#0000c0"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;path&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#ff7700"&gt;&lt;strong&gt;class&lt;/strong&gt;&lt;/font&gt; &lt;font color="#ff0000"&gt;Debug&lt;/font&gt;&lt;font color="#0000c0"&gt;:&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#ff7700"&gt;&lt;strong&gt;def&lt;/strong&gt;&lt;/font&gt; &lt;font color="#0000ff"&gt;__init__&lt;/font&gt;&lt;font color="#0000c0"&gt;(&lt;/font&gt;&lt;font color="#ff7700"&gt;&lt;strong&gt;self&lt;/strong&gt;&lt;/font&gt;&lt;font color="#0000c0"&gt;,&lt;/font&gt; &lt;font color="#000000"&gt;filename&lt;/font&gt;&lt;font color="#0000c0"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt;os&lt;/font&gt;&lt;font color="#0000c0"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;path&lt;/font&gt;&lt;font color="#0000c0"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;abspath&lt;/font&gt;&lt;font color="#0000c0"&gt;(&lt;/font&gt;&lt;font color="#804000"&gt;'debug.txt'&lt;/font&gt;&lt;font color="#0000c0"&gt;)&lt;/font&gt;&lt;font color="#0000c0"&gt;,&lt;/font&gt; &lt;font color="#000000"&gt;debug&lt;/font&gt;&lt;font color="#0000c0"&gt;=&lt;/font&gt;&lt;font color="#ff7700"&gt;&lt;strong&gt;None&lt;/strong&gt;&lt;/font&gt;&lt;font color="#0000c0"&gt;)&lt;/font&gt;&lt;font color="#0000c0"&gt;:&lt;/font&gt;&lt;br /&gt;        &lt;font color="#ff7700"&gt;&lt;strong&gt;self&lt;/strong&gt;&lt;/font&gt;&lt;font color="#0000c0"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;filename&lt;/font&gt; &lt;font color="#0000c0"&gt;=&lt;/font&gt; &lt;font color="#000000"&gt;filename&lt;/font&gt;&lt;br /&gt;        &lt;font color="#ff7700"&gt;&lt;strong&gt;self&lt;/strong&gt;&lt;/font&gt;&lt;font color="#0000c0"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;reset&lt;/font&gt;&lt;font color="#0000c0"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt;filename&lt;/font&gt;&lt;font color="#0000c0"&gt;)&lt;/font&gt;&lt;br /&gt;        &lt;font color="#ff7700"&gt;&lt;strong&gt;self&lt;/strong&gt;&lt;/font&gt;&lt;font color="#0000c0"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;debug&lt;/font&gt; &lt;font color="#0000c0"&gt;=&lt;/font&gt; &lt;font color="#000000"&gt;debug&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#ff7700"&gt;&lt;strong&gt;def&lt;/strong&gt;&lt;/font&gt; &lt;font color="#0000ff"&gt;log&lt;/font&gt;&lt;font color="#0000c0"&gt;(&lt;/font&gt;&lt;font color="#ff7700"&gt;&lt;strong&gt;self&lt;/strong&gt;&lt;/font&gt;&lt;font color="#0000c0"&gt;,&lt;/font&gt; &lt;font color="#0000c0"&gt;*&lt;/font&gt;&lt;font color="#000000"&gt;args&lt;/font&gt;&lt;font color="#0000c0"&gt;)&lt;/font&gt;&lt;font color="#0000c0"&gt;:&lt;/font&gt;&lt;br /&gt;        &lt;font color="#ff7700"&gt;&lt;strong&gt;self&lt;/strong&gt;&lt;/font&gt;&lt;font color="#0000c0"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;output&lt;/font&gt;&lt;font color="#0000c0"&gt;(&lt;/font&gt;&lt;font color="#0000c0"&gt;*&lt;/font&gt;&lt;font color="#000000"&gt;args&lt;/font&gt;&lt;font color="#0000c0"&gt;)&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#ff7700"&gt;&lt;strong&gt;def&lt;/strong&gt;&lt;/font&gt; &lt;font color="#0000ff"&gt;info&lt;/font&gt;&lt;font color="#0000c0"&gt;(&lt;/font&gt;&lt;font color="#ff7700"&gt;&lt;strong&gt;self&lt;/strong&gt;&lt;/font&gt;&lt;font color="#0000c0"&gt;,&lt;/font&gt; &lt;font color="#0000c0"&gt;*&lt;/font&gt;&lt;font color="#000000"&gt;args&lt;/font&gt;&lt;font color="#0000c0"&gt;)&lt;/font&gt;&lt;font color="#0000c0"&gt;:&lt;/font&gt;&lt;br /&gt;        &lt;font color="#ff7700"&gt;&lt;strong&gt;self&lt;/strong&gt;&lt;/font&gt;&lt;font color="#0000c0"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;output&lt;/font&gt;&lt;font color="#0000c0"&gt;(&lt;/font&gt;&lt;font color="#804000"&gt;'[ INFO] -- '&lt;/font&gt;&lt;font color="#0000c0"&gt;,&lt;/font&gt; &lt;font color="#0000c0"&gt;*&lt;/font&gt;&lt;font color="#000000"&gt;args&lt;/font&gt;&lt;font color="#0000c0"&gt;)&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#ff7700"&gt;&lt;strong&gt;def&lt;/strong&gt;&lt;/font&gt; &lt;font color="#0000ff"&gt;warn&lt;/font&gt;&lt;font color="#0000c0"&gt;(&lt;/font&gt;&lt;font color="#ff7700"&gt;&lt;strong&gt;self&lt;/strong&gt;&lt;/font&gt;&lt;font color="#0000c0"&gt;,&lt;/font&gt; &lt;font color="#0000c0"&gt;*&lt;/font&gt;&lt;font color="#000000"&gt;args&lt;/font&gt;&lt;font color="#0000c0"&gt;)&lt;/font&gt;&lt;font color="#0000c0"&gt;:&lt;/font&gt;&lt;br /&gt;        &lt;font color="#ff7700"&gt;&lt;strong&gt;self&lt;/strong&gt;&lt;/font&gt;&lt;font color="#0000c0"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;output&lt;/font&gt;&lt;font color="#0000c0"&gt;(&lt;/font&gt;&lt;font color="#804000"&gt;'[ WARN] -- '&lt;/font&gt;&lt;font color="#0000c0"&gt;,&lt;/font&gt; &lt;font color="#0000c0"&gt;*&lt;/font&gt;&lt;font color="#000000"&gt;args&lt;/font&gt;&lt;font color="#0000c0"&gt;)&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#ff7700"&gt;&lt;strong&gt;def&lt;/strong&gt;&lt;/font&gt; &lt;font color="#0000ff"&gt;error&lt;/font&gt;&lt;font color="#0000c0"&gt;(&lt;/font&gt;&lt;font color="#ff7700"&gt;&lt;strong&gt;self&lt;/strong&gt;&lt;/font&gt;&lt;font color="#0000c0"&gt;,&lt;/font&gt; &lt;font color="#0000c0"&gt;*&lt;/font&gt;&lt;font color="#000000"&gt;args&lt;/font&gt;&lt;font color="#0000c0"&gt;)&lt;/font&gt;&lt;font color="#0000c0"&gt;:&lt;/font&gt;&lt;br /&gt;        &lt;font color="#ff7700"&gt;&lt;strong&gt;self&lt;/strong&gt;&lt;/font&gt;&lt;font color="#0000c0"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;output&lt;/font&gt;&lt;font color="#0000c0"&gt;(&lt;/font&gt;&lt;font color="#804000"&gt;'[ERROR] -- '&lt;/font&gt;&lt;font color="#0000c0"&gt;,&lt;/font&gt; &lt;font color="#0000c0"&gt;*&lt;/font&gt;&lt;font color="#000000"&gt;args&lt;/font&gt;&lt;font color="#0000c0"&gt;)&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#ff7700"&gt;&lt;strong&gt;def&lt;/strong&gt;&lt;/font&gt; &lt;font color="#0000ff"&gt;debug&lt;/font&gt;&lt;font color="#0000c0"&gt;(&lt;/font&gt;&lt;font color="#ff7700"&gt;&lt;strong&gt;self&lt;/strong&gt;&lt;/font&gt;&lt;font color="#0000c0"&gt;,&lt;/font&gt; &lt;font color="#0000c0"&gt;*&lt;/font&gt;&lt;font color="#000000"&gt;args&lt;/font&gt;&lt;font color="#0000c0"&gt;)&lt;/font&gt;&lt;font color="#0000c0"&gt;:&lt;/font&gt;&lt;br /&gt;        &lt;font color="#ff7700"&gt;&lt;strong&gt;self&lt;/strong&gt;&lt;/font&gt;&lt;font color="#0000c0"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;output&lt;/font&gt;&lt;font color="#0000c0"&gt;(&lt;/font&gt;&lt;font color="#804000"&gt;'[DEBUG] -- '&lt;/font&gt;&lt;font color="#0000c0"&gt;,&lt;/font&gt; &lt;font color="#0000c0"&gt;*&lt;/font&gt;&lt;font color="#000000"&gt;args&lt;/font&gt;&lt;font color="#0000c0"&gt;)&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#ff7700"&gt;&lt;strong&gt;def&lt;/strong&gt;&lt;/font&gt; &lt;font color="#0000ff"&gt;traceback&lt;/font&gt;&lt;font color="#0000c0"&gt;(&lt;/font&gt;&lt;font color="#ff7700"&gt;&lt;strong&gt;self&lt;/strong&gt;&lt;/font&gt;&lt;font color="#0000c0"&gt;)&lt;/font&gt;&lt;font color="#0000c0"&gt;:&lt;/font&gt;&lt;br /&gt;        &lt;font color="#000000"&gt;message&lt;/font&gt; &lt;font color="#0000c0"&gt;=&lt;/font&gt; &lt;font color="#0000ff"&gt;traceback&lt;/font&gt;&lt;font color="#0000c0"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;format_exception&lt;/font&gt;&lt;font color="#0000c0"&gt;(&lt;/font&gt;&lt;font color="#0000c0"&gt;*&lt;/font&gt;&lt;font color="#000000"&gt;sys&lt;/font&gt;&lt;font color="#0000c0"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;exc_info&lt;/font&gt;&lt;font color="#0000c0"&gt;(&lt;/font&gt;&lt;font color="#0000c0"&gt;)&lt;/font&gt;&lt;font color="#0000c0"&gt;)&lt;/font&gt;&lt;br /&gt;        &lt;font color="#ff7700"&gt;&lt;strong&gt;self&lt;/strong&gt;&lt;/font&gt;&lt;font color="#0000c0"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;output&lt;/font&gt;&lt;font color="#0000c0"&gt;(&lt;/font&gt;&lt;font color="#804000"&gt;'[Traceback]'&lt;/font&gt;&lt;font color="#0000c0"&gt;,&lt;/font&gt; &lt;font color="#804000"&gt;''&lt;/font&gt;&lt;font color="#0000c0"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;join&lt;/font&gt;&lt;font color="#0000c0"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt;message&lt;/font&gt;&lt;font color="#0000c0"&gt;)&lt;/font&gt;&lt;font color="#0000c0"&gt;)&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#ff7700"&gt;&lt;strong&gt;def&lt;/strong&gt;&lt;/font&gt; &lt;font color="#0000ff"&gt;time&lt;/font&gt;&lt;font color="#0000c0"&gt;(&lt;/font&gt;&lt;font color="#ff7700"&gt;&lt;strong&gt;self&lt;/strong&gt;&lt;/font&gt;&lt;font color="#0000c0"&gt;,&lt;/font&gt; &lt;font color="#0000c0"&gt;*&lt;/font&gt;&lt;font color="#000000"&gt;args&lt;/font&gt;&lt;font color="#0000c0"&gt;)&lt;/font&gt;&lt;font color="#0000c0"&gt;:&lt;/font&gt;&lt;br /&gt;        &lt;font color="#ff7700"&gt;&lt;strong&gt;self&lt;/strong&gt;&lt;/font&gt;&lt;font color="#0000c0"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;output&lt;/font&gt;&lt;font color="#0000c0"&gt;(&lt;/font&gt;&lt;font color="#804000"&gt;'[%s] -- '&lt;/font&gt; &lt;font color="#0000c0"&gt;%&lt;/font&gt; &lt;font color="#0000ff"&gt;time&lt;/font&gt;&lt;font color="#0000c0"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;ctime&lt;/font&gt;&lt;font color="#0000c0"&gt;(&lt;/font&gt;&lt;font color="#0000ff"&gt;time&lt;/font&gt;&lt;font color="#0000c0"&gt;.&lt;/font&gt;&lt;font color="#0000ff"&gt;time&lt;/font&gt;&lt;font color="#0000c0"&gt;(&lt;/font&gt;&lt;font color="#0000c0"&gt;)&lt;/font&gt;&lt;font color="#0000c0"&gt;)&lt;/font&gt;&lt;font color="#0000c0"&gt;,&lt;/font&gt; &lt;font color="#0000c0"&gt;*&lt;/font&gt;&lt;font color="#000000"&gt;args&lt;/font&gt;&lt;font color="#0000c0"&gt;)&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#ff7700"&gt;&lt;strong&gt;def&lt;/strong&gt;&lt;/font&gt; &lt;font color="#0000ff"&gt;output&lt;/font&gt;&lt;font color="#0000c0"&gt;(&lt;/font&gt;&lt;font color="#ff7700"&gt;&lt;strong&gt;self&lt;/strong&gt;&lt;/font&gt;&lt;font color="#0000c0"&gt;,&lt;/font&gt; &lt;font color="#0000c0"&gt;*&lt;/font&gt;&lt;font color="#000000"&gt;args&lt;/font&gt;&lt;font color="#0000c0"&gt;)&lt;/font&gt;&lt;font color="#0000c0"&gt;:&lt;/font&gt;&lt;br /&gt;        &lt;font color="#ff7700"&gt;&lt;strong&gt;if&lt;/strong&gt;&lt;/font&gt; &lt;font color="#ff7700"&gt;&lt;strong&gt;self&lt;/strong&gt;&lt;/font&gt;&lt;font color="#0000c0"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;is_debug&lt;/font&gt;&lt;font color="#0000c0"&gt;(&lt;/font&gt;&lt;font color="#0000c0"&gt;)&lt;/font&gt;&lt;font color="#0000c0"&gt;:&lt;/font&gt;&lt;br /&gt;            &lt;font color="#008000"&gt;#encoding = locale.getdefaultlocale()[1]&lt;br /&gt;&lt;/font&gt;            &lt;font color="#000000"&gt;encoding&lt;/font&gt; &lt;font color="#0000c0"&gt;=&lt;/font&gt; &lt;font color="#804000"&gt;'utf-8'&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;out&lt;/font&gt; &lt;font color="#0000c0"&gt;=&lt;/font&gt; &lt;font color="#000000"&gt;open&lt;/font&gt;&lt;font color="#0000c0"&gt;(&lt;/font&gt;&lt;font color="#ff7700"&gt;&lt;strong&gt;self&lt;/strong&gt;&lt;/font&gt;&lt;font color="#0000c0"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;filename&lt;/font&gt;&lt;font color="#0000c0"&gt;,&lt;/font&gt; &lt;font color="#804000"&gt;'a'&lt;/font&gt;&lt;font color="#0000c0"&gt;)&lt;/font&gt;&lt;br /&gt;            &lt;font color="#ff7700"&gt;&lt;strong&gt;for&lt;/strong&gt;&lt;/font&gt; &lt;font color="#000000"&gt;i&lt;/font&gt; &lt;font color="#ff7700"&gt;&lt;strong&gt;in&lt;/strong&gt;&lt;/font&gt; &lt;font color="#000000"&gt;args&lt;/font&gt;&lt;font color="#0000c0"&gt;:&lt;/font&gt;&lt;br /&gt;                &lt;font color="#ff7700"&gt;&lt;strong&gt;if&lt;/strong&gt;&lt;/font&gt; &lt;font color="#ff7700"&gt;&lt;strong&gt;not&lt;/strong&gt;&lt;/font&gt; &lt;font color="#000000"&gt;type&lt;/font&gt;&lt;font color="#0000c0"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt;i&lt;/font&gt;&lt;font color="#0000c0"&gt;)&lt;/font&gt; &lt;font color="#ff7700"&gt;&lt;strong&gt;in&lt;/strong&gt;&lt;/font&gt; &lt;font color="#0000c0"&gt;[&lt;/font&gt;&lt;font color="#000000"&gt;types&lt;/font&gt;&lt;font color="#0000c0"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;UnicodeType&lt;/font&gt;&lt;font color="#0000c0"&gt;,&lt;/font&gt; &lt;font color="#000000"&gt;types&lt;/font&gt;&lt;font color="#0000c0"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;StringTypes&lt;/font&gt;&lt;font color="#0000c0"&gt;,&lt;/font&gt; &lt;font color="#000000"&gt;types&lt;/font&gt;&lt;font color="#0000c0"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;StringType&lt;/font&gt;&lt;font color="#0000c0"&gt;]&lt;/font&gt;&lt;font color="#0000c0"&gt;:&lt;/font&gt;&lt;br /&gt;                    &lt;font color="#000000"&gt;s&lt;/font&gt;&lt;font color="#0000c0"&gt;=&lt;/font&gt; &lt;font color="#000000"&gt;repr&lt;/font&gt;&lt;font color="#0000c0"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt;i&lt;/font&gt;&lt;font color="#0000c0"&gt;)&lt;/font&gt;&lt;br /&gt;                &lt;font color="#ff7700"&gt;&lt;strong&gt;else&lt;/strong&gt;&lt;/font&gt;&lt;font color="#0000c0"&gt;:&lt;/font&gt;&lt;br /&gt;                    &lt;font color="#000000"&gt;s&lt;/font&gt; &lt;font color="#0000c0"&gt;=&lt;/font&gt; &lt;font color="#000000"&gt;i&lt;/font&gt;&lt;br /&gt;                &lt;font color="#ff7700"&gt;&lt;strong&gt;if&lt;/strong&gt;&lt;/font&gt; &lt;font color="#000000"&gt;type&lt;/font&gt;&lt;font color="#0000c0"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt;s&lt;/font&gt;&lt;font color="#0000c0"&gt;)&lt;/font&gt; &lt;font color="#0000c0"&gt;==&lt;/font&gt; &lt;font color="#000000"&gt;type&lt;/font&gt;&lt;font color="#0000c0"&gt;(&lt;/font&gt;&lt;font color="#804000"&gt;u''&lt;/font&gt;&lt;font color="#0000c0"&gt;)&lt;/font&gt;&lt;font color="#0000c0"&gt;:&lt;/font&gt;&lt;br /&gt;                    &lt;font color="#000000"&gt;out&lt;/font&gt;&lt;font color="#0000c0"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;write&lt;/font&gt;&lt;font color="#0000c0"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt;s&lt;/font&gt;&lt;font color="#0000c0"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;encode&lt;/font&gt;&lt;font color="#0000c0"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt;encoding&lt;/font&gt;&lt;font color="#0000c0"&gt;)&lt;/font&gt;&lt;font color="#0000c0"&gt;)&lt;/font&gt;&lt;br /&gt;                &lt;font color="#ff7700"&gt;&lt;strong&gt;else&lt;/strong&gt;&lt;/font&gt;&lt;font color="#0000c0"&gt;:&lt;/font&gt;&lt;br /&gt;                    &lt;font color="#000000"&gt;out&lt;/font&gt;&lt;font color="#0000c0"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;write&lt;/font&gt;&lt;font color="#0000c0"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt;s&lt;/font&gt;&lt;font color="#0000c0"&gt;)&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;out&lt;/font&gt;&lt;font color="#0000c0"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;write&lt;/font&gt;&lt;font color="#0000c0"&gt;(&lt;/font&gt;&lt;font color="#804000"&gt;&amp;quot;\n&amp;quot;&lt;/font&gt;&lt;font color="#0000c0"&gt;)&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;out&lt;/font&gt;&lt;font color="#0000c0"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;close&lt;/font&gt;&lt;font color="#0000c0"&gt;(&lt;/font&gt;&lt;font color="#0000c0"&gt;)&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#ff7700"&gt;&lt;strong&gt;def&lt;/strong&gt;&lt;/font&gt; &lt;font color="#0000ff"&gt;reset&lt;/font&gt;&lt;font color="#0000c0"&gt;(&lt;/font&gt;&lt;font color="#ff7700"&gt;&lt;strong&gt;self&lt;/strong&gt;&lt;/font&gt;&lt;font color="#0000c0"&gt;,&lt;/font&gt; &lt;font color="#000000"&gt;filename&lt;/font&gt;&lt;font color="#0000c0"&gt;)&lt;/font&gt;&lt;font color="#0000c0"&gt;:&lt;/font&gt;&lt;br /&gt;        &lt;font color="#ff7700"&gt;&lt;strong&gt;if&lt;/strong&gt;&lt;/font&gt; &lt;font color="#ff7700"&gt;&lt;strong&gt;self&lt;/strong&gt;&lt;/font&gt;&lt;font color="#0000c0"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;is_debug&lt;/font&gt;&lt;font color="#0000c0"&gt;(&lt;/font&gt;&lt;font color="#0000c0"&gt;)&lt;/font&gt;&lt;font color="#0000c0"&gt;:&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;open&lt;/font&gt;&lt;font color="#0000c0"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt;filename&lt;/font&gt;&lt;font color="#0000c0"&gt;,&lt;/font&gt; &lt;font color="#804000"&gt;'w'&lt;/font&gt;&lt;font color="#0000c0"&gt;)&lt;/font&gt;&lt;br /&gt;            &lt;font color="#ff7700"&gt;&lt;strong&gt;self&lt;/strong&gt;&lt;/font&gt;&lt;font color="#0000c0"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;filename&lt;/font&gt; &lt;font color="#0000c0"&gt;=&lt;/font&gt; &lt;font color="#000000"&gt;filename&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#ff7700"&gt;&lt;strong&gt;def&lt;/strong&gt;&lt;/font&gt; &lt;font color="#0000ff"&gt;is_debug&lt;/font&gt;&lt;font color="#0000c0"&gt;(&lt;/font&gt;&lt;font color="#ff7700"&gt;&lt;strong&gt;self&lt;/strong&gt;&lt;/font&gt;&lt;font color="#0000c0"&gt;)&lt;/font&gt;&lt;font color="#0000c0"&gt;:&lt;/font&gt;&lt;br /&gt;        &lt;font color="#ff7700"&gt;&lt;strong&gt;if&lt;/strong&gt;&lt;/font&gt; &lt;font color="#ff7700"&gt;&lt;strong&gt;not&lt;/strong&gt;&lt;/font&gt; &lt;font color="#000000"&gt;DEBUG&lt;/font&gt;&lt;font color="#0000c0"&gt;:&lt;/font&gt;&lt;br /&gt;            &lt;font color="#ff7700"&gt;&lt;strong&gt;return&lt;/strong&gt;&lt;/font&gt; &lt;font color="#ff7700"&gt;&lt;strong&gt;False&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#ff7700"&gt;&lt;strong&gt;if&lt;/strong&gt;&lt;/font&gt; &lt;font color="#ff7700"&gt;&lt;strong&gt;self&lt;/strong&gt;&lt;/font&gt;&lt;font color="#0000c0"&gt;.&lt;/font&gt;&lt;font color="#0000ff"&gt;debug&lt;/font&gt; &lt;font color="#ff7700"&gt;&lt;strong&gt;is&lt;/strong&gt;&lt;/font&gt; &lt;font color="#ff7700"&gt;&lt;strong&gt;None&lt;/strong&gt;&lt;/font&gt;&lt;font color="#0000c0"&gt;:&lt;/font&gt;&lt;br /&gt;            &lt;font color="#ff7700"&gt;&lt;strong&gt;return&lt;/strong&gt;&lt;/font&gt; &lt;font color="#000000"&gt;DEBUG&lt;/font&gt;&lt;br /&gt;        &lt;font color="#ff7700"&gt;&lt;strong&gt;else&lt;/strong&gt;&lt;/font&gt;&lt;font color="#0000c0"&gt;:&lt;/font&gt;&lt;br /&gt;            &lt;font color="#ff7700"&gt;&lt;strong&gt;return&lt;/strong&gt;&lt;/font&gt; &lt;font color="#ff7700"&gt;&lt;strong&gt;self&lt;/strong&gt;&lt;/font&gt;&lt;font color="#0000c0"&gt;.&lt;/font&gt;&lt;font color="#0000ff"&gt;debug&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;debug&lt;/font&gt; &lt;font color="#0000c0"&gt;=&lt;/font&gt; &lt;font color="#ff7700"&gt;&lt;strong&gt;None&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;error&lt;/font&gt; &lt;font color="#0000c0"&gt;=&lt;/font&gt; &lt;font color="#ff7700"&gt;&lt;strong&gt;None&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#ff7700"&gt;&lt;strong&gt;if&lt;/strong&gt;&lt;/font&gt; &lt;font color="#000000"&gt;__name__&lt;/font&gt; &lt;font color="#0000c0"&gt;==&lt;/font&gt; &lt;font color="#804000"&gt;'__main__'&lt;/font&gt;&lt;font color="#0000c0"&gt;:&lt;/font&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;debug&lt;/font&gt; &lt;font color="#0000c0"&gt;=&lt;/font&gt; &lt;font color="#ff0000"&gt;Debug&lt;/font&gt;&lt;font color="#0000c0"&gt;(&lt;/font&gt;&lt;font color="#0000c0"&gt;)&lt;/font&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;error&lt;/font&gt; &lt;font color="#0000c0"&gt;=&lt;/font&gt; &lt;font color="#ff0000"&gt;Debug&lt;/font&gt;&lt;font color="#0000c0"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt;os&lt;/font&gt;&lt;font color="#0000c0"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;path&lt;/font&gt;&lt;font color="#0000c0"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;abspath&lt;/font&gt;&lt;font color="#0000c0"&gt;(&lt;/font&gt;&lt;font color="#804000"&gt;'error.txt'&lt;/font&gt;&lt;font color="#0000c0"&gt;)&lt;/font&gt;&lt;font color="#0000c0"&gt;)&lt;/font&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;debug&lt;/font&gt;&lt;font color="#0000c0"&gt;.&lt;/font&gt;&lt;font color="#0000ff"&gt;log&lt;/font&gt;&lt;font color="#0000c0"&gt;(&lt;/font&gt;&lt;font color="#804000"&gt;'log'&lt;/font&gt;&lt;font color="#0000c0"&gt;)&lt;/font&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;debug&lt;/font&gt;&lt;font color="#0000c0"&gt;.&lt;/font&gt;&lt;font color="#0000ff"&gt;info&lt;/font&gt;&lt;font color="#0000c0"&gt;(&lt;/font&gt;&lt;font color="#804000"&gt;'info'&lt;/font&gt;&lt;font color="#0000c0"&gt;)&lt;/font&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;debug&lt;/font&gt;&lt;font color="#0000c0"&gt;.&lt;/font&gt;&lt;font color="#0000ff"&gt;warn&lt;/font&gt;&lt;font color="#0000c0"&gt;(&lt;/font&gt;&lt;font color="#804000"&gt;'warn'&lt;/font&gt;&lt;font color="#0000c0"&gt;)&lt;/font&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;debug&lt;/font&gt;&lt;font color="#0000c0"&gt;.&lt;/font&gt;&lt;font color="#0000ff"&gt;error&lt;/font&gt;&lt;font color="#0000c0"&gt;(&lt;/font&gt;&lt;font color="#804000"&gt;'error'&lt;/font&gt;&lt;font color="#0000c0"&gt;)&lt;/font&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;debug&lt;/font&gt;&lt;font color="#0000c0"&gt;.&lt;/font&gt;&lt;font color="#0000ff"&gt;debug&lt;/font&gt;&lt;font color="#0000c0"&gt;(&lt;/font&gt;&lt;font color="#804000"&gt;'debug'&lt;/font&gt;&lt;font color="#0000c0"&gt;)&lt;/font&gt;              &lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;font color="#ffffff"&gt;&lt;/font&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;&lt;img src ="http://blog.donews.com/ygao/aggbug/1048251.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>ygao</dc:creator><title>为什么我说django的MTV不是MVC</title><link>http://blog.donews.com/ygao/archive/2006/09/05/1029566.aspx</link><pubDate>Tue, 05 Sep 2006 19:22:00 GMT</pubDate><guid>http://blog.donews.com/ygao/archive/2006/09/05/1029566.aspx</guid><wfw:comment>http://blog.donews.com/ygao/comments/1029566.aspx</wfw:comment><comments>http://blog.donews.com/ygao/archive/2006/09/05/1029566.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.donews.com/ygao/comments/commentRss/1029566.aspx</wfw:commentRss><trackback:ping>http://tb.donews.net/TrackBack.aspx?PostId=1029566</trackback:ping><description>我想强调的是：不是说web架构都是MVC的模式就是好框架。
我认为的好的框架的重要的相当高的重用代码的能力，这个我曾重复多次。
在dj中的middlewave的使用，有采用回调形式调用的。这样做是简单了很多的问题。但随之而来的问题如果你不进去看一看middlewave做了什么，不采取copy的形式，你根本重用不了middlewave的代码。回调过于简单，没有任何的接口可以遵偱。
还有一个全局的dispatch的hook的问题，这个用得越多，离MVC的之间的关系，就会越来越远。
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;&lt;img src ="http://blog.donews.com/ygao/aggbug/1029566.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>ygao</dc:creator><title>也谈django</title><link>http://blog.donews.com/ygao/archive/2006/08/29/1022135.aspx</link><pubDate>Tue, 29 Aug 2006 12:47:00 GMT</pubDate><guid>http://blog.donews.com/ygao/archive/2006/08/29/1022135.aspx</guid><wfw:comment>http://blog.donews.com/ygao/comments/1022135.aspx</wfw:comment><comments>http://blog.donews.com/ygao/archive/2006/08/29/1022135.aspx#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://blog.donews.com/ygao/comments/commentRss/1022135.aspx</wfw:commentRss><trackback:ping>http://tb.donews.net/TrackBack.aspx?PostId=1022135</trackback:ping><description>最近，大家都在谈论guido谈论到django的话题。

&amp;nbsp;

&amp;ldquo;Guido just pronounced: Django is the [Python] web framework

    Won&amp;rsquo;t be part of the core, but will be as &amp;lsquo;standard&amp;rsquo; as PIL or NumPy 
    This was not what I expected the outcome of my talk would be, but hey, I&amp;rsquo;ll take it 
    H&lt;img src ="http://blog.donews.com/ygao/aggbug/1022135.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>