Python:urllib与urllib2错误解析

来源:互联网 发布:赵文卓甄子丹事件 知乎 编辑:程序博客网 时间:2024/05/21 03:19
原文地址:http://www.zhenv5.com/?p=398
 
首先说一下我用的Python版本是2.7.1,等换了新主机就用最新的3.1版本,

现在先将就着学习Python的基本知识。

悲剧的原因很简单,为了看看python的urllib和urllib2模块到底是干么的。

我新建了个文件,命名为urllib.py,于是悲剧开始了,因为很明显它和

python的模块重名了,便会产生一系列的冲突。我以为是版本问题,

于是我换成使用urllib2模块,写下如下代码:

import urllib2print urllib2.urlopen('http://www.google.com').read()

出现了这样的错误:
Traceback (most recent call last):

File "F:\pyworkspace\demourllib.py", line 1, in <module>

import urllib2

File "D:\programs\IR\python\lib\urllib2.py", line 111, in <module>

from urllib import (unwrap, unquote, splittype, splithost, quote,

File "F:/pyworkspace\urllib.py", line 2, in <module>

AttributeError: 'module' object has no attribute 'urlopen'

网上搜了搜,知道重名引起冲突了,便改名成demourllib.py

重新运行还有错误,如下:

Traceback (most recent call last):

File "F:\pyworkspace\demourllib.py", line 1, in <module>

import urllib

File "F:/pyworkspace\urllib.py", line 1, in <module>

File "D:\programs\IR\python\lib\urllib2.py", line 111, in <module>

from urllib import (unwrap, unquote, splittype, splithost, quote,

ImportError: cannot import name unwrap

我又在网上搜了搜,有这样一段话:

如果你的 .pyc 文件和py源码文件在同一个目录, 那么
pyton运行的时候会优先使用pyc文件, 所以有时你需要
我看了看工作目录下还真有个urllib.pyc文件,怪不得还是

不能运行成功,删除之。

再运行还不行,错误如下:
Traceback (most recent call last):
File "F:\pyworkspace\demourllib.py", line 2, in <module>
print urllib.urlopen('http://www.google.com').read()
File "D:\programs\IR\python\lib\urllib.py", line 84, in urlopen
return opener.open(url)
File "D:\programs\IR\python\lib\urllib.py", line 205, in open
return getattr(self, name)(url)
File "D:\programs\IR\python\lib\urllib.py", line 356, in open_http
return self.http_error(url, fp, errcode, errmsg, headers)
File "D:\programs\IR\python\lib\urllib.py", line 369, in http_error
result = method(url, fp, errcode, errmsg, headers)
File "D:\programs\IR\python\lib\urllib.py", line 632, in http_error_302
data)
File "D:\programs\IR\python\lib\urllib.py", line 647, in redirect_internal
return self.open(newurl)
File "D:\programs\IR\python\lib\urllib.py", line 205, in open
return getattr(self, name)(url)
File "D:\programs\IR\python\lib\urllib.py", line 349, in open_http
'got a bad status line', None)
IOError: ('http protocol error', 0, 'got a bad status line', None)
 
这个问题似曾相识,nutch配置的时候网址后面都要有个反斜杠即'/'

于是将网址改成'http://www.google.com/'

还要注意的是http://这个标识千万不能省,否则会出现

unknown url type的错误,吐血告诫。

终于运行成功,oh yeah。总结下经验,以后避免出现。

命名很重要,要拿出给自己孩子命名的认真态度来才行

注意小细节。
原创粉丝点击