免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 12032 | 回复: 7
打印 上一主题 下一主题

奇怪的except错误 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-10-09 15:08 |只看该作者 |倒序浏览
国庆节在家里花了几天时间专研了一下子python,写了个从网上取某个网页并从网页中提取所需数据的小程序,遇到了一个奇怪的问题。在某种情况下,正常的except也会引发错误!

我的取网页的子程序是这样的:
  1. def get_htmlfile(url,proxies=None):
  2.     if proxies:     #if the proxies is provided
  3.         proxystr='http://'+proxies
  4.         _proxies={'http':proxystr}
  5.         print 'Connecting the URL:%s \nwith proxies:%s...' % (url,proxystr)
  6.     else:
  7.         _proxies=None   #there is no proxies by default
  8.         print 'Connecting the URL:%s...' % (url)

  9.     try:   
  10.         fp=urllib.urlopen(url,proxies=_proxies)
  11.         data=fp.read()
  12.     except IOError,(errno,strerror):
  13.         print '\n\aI/O Error(%s): %s' % (errno,strerror)
  14.         data=None
  15.     except:
  16.         print "Unexpected error:", sys.exc_info()[0]
  17.         raise
  18.         
  19.     return data
复制代码


取网页的主程序是这样的(省略了后面无关部分):
  1. def main():
  2.     proxy=None
  3.     if len(sys.argv)<2:
  4.         print __doc__
  5.         sys.exit(1)
  6.    
  7.     if len(sys.argv)==3:
  8.         proxy=sys.argv[2]

  9.     filestr=get_htmlfile(sys.argv[1],proxy)
  10.     if not filestr:
  11.         print 'No data was got from web!'
  12.         sys.exit(1)
  13.     print 'Get the html file done!'

  14.     print '\nNow analysis and extract the result from the html file...'
  15.   。。。。。。
复制代码


程序很简单,也无需多说,需要注意的是,关于子程序中except这部分,应该是标准的写法,没啥问题,对吧?

经过测试,程序也确实如预设那样运行的好好的:
1。通过代理访问本机的主页:
  1. admin@/cygdrive/c/users/Analysis# ./getResult.py http://localhost/ 172.28.30.80:8080
  2. Connecting the URL:http://localhost/
  3. with proxies:http://172.28.30.80:8080...
  4. Get the html file done!

  5. Now analysis and extract the result from the html file...
复制代码


2。停掉本机的webserver,再试一次:
程序也获得了预设的结果,无法打开网页,rasie一个错误,被except接收到。
  1. admin@/cygdrive/c/users/Analysis# ./getResult.py http://localhost/ 172.28.30.80:8080

  2. Connecting the URL:http://localhost/...

  3. I/O Error(socket error): (10061, 'Connection refused')
  4. No data was got from web!
复制代码


随后又将http://localhost换为正式的url也得到了正确的结果。嗯,我很有成就感,整理了一下程序,加了一些注释,存盘。睡觉!

可是今天,我又如常运行getResult.py去取数据,却出现了以下的错误:
  1. admin@/cygdrive/c/users/Analysis# ./getResult.py http://www.test.com/kjn 172.28.30.80:8080
  2. Connecting the URL:http://www.test.com/kjn/
  3. with proxies:http://172.28.30.80:8080...
  4. Traceback (most recent call last):
  5.   File "./getResult.py", line 65, in ?
  6.     main()
  7.   File "./getResult.py", line 27, in main
  8.     filestr=get_htmlfile(sys.argv[1],proxy)
  9.   File "c:\users\Analysis\common.py", line 26, in get_htmlfile
  10.     except IOError,(errno,strerror):
  11. ValueError: too many values to unpack
复制代码


咦,怎么except捉不到错误了?“too many values to unpack”这个错误也是我从没见过的错误,并且它好像不是右try内的语句而是except本身产生的!又试了几次,结果一样!经过检查程序是和昨天的一样,没做任何只是做了添加注释的操作,并且当时添加注释后测试也是正常的。我又试了一下取本机webserver的页面也是正常的。错误好像跟要取的页面有关,但为什么会出这个错呢?

各位大侠有何高见?

论坛徽章:
0
2 [报告]
发表于 2005-10-09 15:34 |只看该作者

奇怪的except错误

too many values to unpack

这种错误是指一个tuple值赋给一个tuple变量时,变量个数不够造成的。如:
a, b = (1, 2, 3)

你可以把

except IOError,(errno,strerror):

改为:

except IOError,e:

把e打出来看一看是个什么东西。好象是参数返回的个数不一样。

论坛徽章:
0
3 [报告]
发表于 2005-10-09 15:56 |只看该作者

奇怪的except错误

经过几次试验,发现出错的时候用浏览器取打开相应的网页时,跳出个请求输入用户名密码窗口,但现在又没有了,程序也正常了。

limodou,按你的要求改了,但这个错误又不再出现了!

论坛徽章:
0
4 [报告]
发表于 2005-10-09 16:01 |只看该作者

奇怪的except错误

呵呵,等有错误再说吧。

论坛徽章:
0
5 [报告]
发表于 2005-10-09 16:17 |只看该作者

奇怪的except错误

我猜可能是由于网页出现需要验证的窗口而导致了IOError错误,但这个错误返回的参数可能包含了除errno和strerror以外的别的信息,因此导致了except IOError,(errno,strerror): 该语句的错误。
但我觉得不大理解的是,难道except的错误信息没有固定的格式的吗?(就这个IOError来说)。如果是这样的话,在写except的时候该多麻烦啊!

论坛徽章:
0
6 [报告]
发表于 2005-10-09 16:20 |只看该作者

奇怪的except错误

所以你使用一个参数来接收就行了。

应该是没有固定格式。

论坛徽章:
0
7 [报告]
发表于 2005-10-09 16:38 |只看该作者

奇怪的except错误

lz精神可嘉!

论坛徽章:
0
8 [报告]
发表于 2005-10-09 17:32 |只看该作者

奇怪的except错误

原帖由 "limodou" 发表:
所以你使用一个参数来接收就行了。


这倒也是!以不变应万变,呵呵。

lz精神可嘉!


谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP