最近身边的人或多或少都知道一点python,自己也想动手试试吧。按照网上的教程,安装了python,Eclipse插件pydev。接下来就是在Eclipse下新建工程,创建py文件这就不多说了。
第一个文件写点什么东西呢?helloworld还是算了,有点高级些的东西吗,听说python代码比较简洁。想了想还是请求url, 用过 java的朋友都知道相对比较繁琐,创建URL、HttpURLConnection对象,设置请求方式等。
自己也不懂python的语法,不知道如何下手,还是从网上直接copy一段吧
import urllib2 response = urllib2.urlopen('http://www.baidu.com') html = response.read() print (html)
好简单啊,当保存时编译器提示:Undefined variable from import: urlopen。将代码直接copy到cmd窗口下执行没有任何问题,排除了python版本或代码自身的问题,难道pydev插件有问题?urllib2应该找到了,怎么就没有urlopen呢?
在Python的安装目录下找到/Lib/urlib2.py发现是有urlopen定义的,那就很奇怪了。难道还有别的urllib2????这时候恍然大悟,原来在IDE下我把文件名称保存为了,urllib2.py。这就导致import引用的是当前文件,而当前文件里是没有定义urlopen方法的。
知道了错的地方就改掉自己定义的文件名称吧,改成了urllib2Test.py这下应该没问题了吧。果然编译器没有报错。心里暗自高兴
当在IDE环境下执行时,依然提示:AttributeError: 'module' object has no attribute 'urlopen',编译通过了,为什么执行会有问题呢?难道是执行先前编译的文件?到Python的安装目录下找到/Lib/urlib2.pyc将其删除重新编译执行,依然还是错误。
这下纳闷了,在仔细看一下错误信息:
怎么会有D:SourceWorkspacespiderurllib2.py这个路径,安装python的目录不在这里,刚刚已经重名了这个文件的,理论应该不在存在这个文件了。
打开对应的目录,确实不存在D:SourceWorkspacespiderurllib2.py,但却存在编译的字节码文件D:SourceWorkspacespiderurllib2.pyc。看来执行的时候不是执行的安装包下的编译文件,而是执行重命名之前的编译字节码文件。
果断将这个原来编译产生的文件删除,重新在IDE环境下执行。成功了!!
总结
1.python引用规则不熟悉,导致引用冲突:import当前文件所在目录优先级高于安装目录。
2.可能是pydev插件的问题,当前文件有编译后的引用文件。当文件不存在了,不会再进行编译,而执行的时候依然执行了用到引用的文件首先在当前目录下查找引用的编译文件,如果有就直接使用导致错误