教女朋友学Python(9)——看,那边有好多洞

编程是一门要动手的学问,我在必要的地方用动态截图是可以保证阅读的完整性,但是那仅仅是我敲的代码。

上一期我们已经把该敲的代码差不多都敲完了。构造了一个网址,用正则表达式获取照片的链接列表,然后通过一个循环下载每个链接的图片。一切在逻辑上如此美好。

可惜,然并卵,逻辑上的美好不顶用,一运行就会报错。

403错误表示虽然资源在网络上是存在的,但是服务器拒绝了你的请求,高冷这种事,本来也是没什么道理可讲的。既然一个老公太高冷,换一个舔就好了。

不过在代码里面没有这么简单,一旦遇到错误,程序就会停止运行,不会自动的换一个。那怎么办呢。在高级语言里面,处理错误一般都会有try....except....finally....。用人话就是:我先试试看,遇到错误怎么处理,最后干点什么。python当然是高级语言,也有这样的机制,加到我们的代码中就是:
try:
    request.urlretrieve(imgurl, filename)
    print("完成下载", filename)
except Exception:
    pass
意思就是,我们试着用request.irlretrieve下载图片,如果遇到错误,就pass,pass在python里面就是啥都不干,只占个位置,所以就会进入下一轮的循环,去下载另一张图片。

这里有两点要注意,第一是Exception,看名字就明白是一个通用错误,能捕获所有错误。而在我们的下载过程中,大概是不会遇到其他错误的,只会遇到HTTP错误,所以用error.HTTPError (error也是来自于模块urllib)就可以了,用Exception是杀鸡用牛刀。用不同的错误类型,只能捕获相应的类型的错误。Exception能捕获所有错误。

有同学可能会问,搞那么多错误类型这么麻烦,用Exception一网打尽岂不是很好。每个人都会这么想,但在实际使用的过程中,经常会对不同类型的错误做不同的处理,比如在我们的下载过程中,遇到下载不下来的网络错误,我们就跳过,遇到文件名重名了的IO错误,我们就改个名字。要加一种错误类型的处理,就再加一个except带上相应的错误类型就好了。

第二点要注意的地方是,我们没有用finally。这个是看情况来决定用不用的。finally的意思是,不管成不成,都要执行的内容。可能我不管成不成,最后都没啥事情要做了,那finally就省去了,但是try....except...是万万不能省的。

加了错误处理了之后再来看运行结果:

这样下完一页,再下一页,用个循环下一万页,老公就装进电脑里面啦。

这个实例就此讲完了,中间串讲了python基础知识,包括变量、变量的运算、函数、模块、编码和byte数据、正则表达式、列表和循环以及今天的错误处理,实际上python基础的内容差不多就这么多了。

不过因为我们的例子简单,串讲的时候还漏掉了两个不得不讲的知识点,一个是条件判断,一个是面向对象。

条件判断是一个比较简单的内容,形式是:
if a>b:
    print("a>b")
elif a==b:
    print("a=b")
else:
    print("a<b")
elif 就是else if的意思,形式就是这么简单,非常像人话了。所谓条件判断,就是如果条件1成立,怎么办,不然的话如果条件2成立,又怎么办,再不然的话再怎么办。这里的条件,必须是布尔类型,还记得布尔类型么,就是只有两个值的那个数据类型,一个是True,一个是False。

怎么理解呢,请看:

这么看来,是不是if和elif后面全部都是跟的布尔类型的数据。请注意,判断a和b相等,是用==,要是不小心用了=,就会是把b的值赋给a了。

另外elif不是必须的部分,也就是可以如果条件1成立,怎么办,不然又怎么办,就没有条件2。当然也可以有一万个elif。

条件判断讲完了,面向对象是一个稍微大一点的话题,下期也就是这个系列的最后一期来讲。

欢迎关注我的微信公众号获取最新文章:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值