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。条件判断讲完了,面向对象是一个稍微大一点的话题,下期也就是这个系列的最后一期来讲。
欢迎关注我的微信公众号获取最新文章:
新闻热点
疑难解答