首页 > 学院 > 开发设计 > 正文

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

2019-11-14 11:51:00
字体:
来源:转载
供稿:网友
编程是一门要动手的学问,我在必要的地方用动态截图是可以保证阅读的完整性,但是那仅仅是我敲的代码。上一期我们已经把该敲的代码差不多都敲完了。构造了一个网址,用正则表达式获取照片的链接列表,然后通过一个循环下载每个链接的图片。一切在逻辑上如此美好。可惜,然并卵,逻辑上的美好不顶用,一运行就会报错。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。

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

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


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表