今天讲的是关键时候不卡壳的技能,尤其是循环语句中和数据清洗中,先假设一种情况,领导安排你把,某机构给你们的坐标x和y数据列表中的每个元素的x偏移3个单位,假设你现在已经可以掌握相关的内容了,心里想太easy了,上来就说一顿操作,愉快的敲了如下的代码:
xy_file_list = open('./坐标.csv') new_xy = [(item[0]+3,item[1]) for item in xy_file_list]print("finish!!!")
当你点击了run,愉快的等待屏幕显示 "finish!!!"的时候,没想到屏幕却是一堆xxError,纳尼不应该啊,程序没问题啊,于是你赶紧检查一下坐标.csv里面的内容,你理想的是数据应该是[(1,2),(2,2),(1,4),(1,22),(1,6),(31,2),(4,2)],没想到分析数据后,傻眼了,给的数据是[(1,2),(2,2),(),(1,22),(1,6),(4,2)],上面的程序跑这样的数据,不报错就见鬼了,于是你又开始 加了一堆 判断条件。
xy_file_list = open('./坐标.csv')new_xy = []for item in xy_file_list:if len(item)>0: new_xy.append((item[0]+3,item[1]))
ok,程序暂时没问题了,很不幸领导又拿来了一个坐标数据,这次你学乖了,开始先检查数据了,一看数据是这样的[(1,2),(2,2),(),('1','22'),(1,6),(4,2)],估计心里又开始想怎么写判断条件了。
难道就拿那些xxError,没有办法了吗,只能写一个个if来规避这些,非也非也,办法肯定是有的,只要简单的修改最初的代码如下:
xy_file_list = open('./坐标.csv')new_xy = []for item in xy_file_list:try: new_xy.append((item[0]+3,item[1])) except Exception:continue
保证不会报错了,这个就是非常简单粗暴的处理方式了,是告诉程序遇到任何Error,都continue。
我们就上面那段代码,介绍一下python中如何来处理这些异常 error。首先要需要两个关键字 try 和 except两个字母跟的内容如下:
大部分人比较困惑的应该是如何 写 to do error 的代码吧,通常而已有下面几种:
直接忽视 使用 pass 或者 continue 关键字,不去处理,毕竟不处理也是一种处理;
打印出来发生了什么error, print(e),看看有哪些错误, 需要 上面配合使用 as e;
打印出哪些内容报错,例如上面案例中的print('错误的数据有:',item)
Python的错误
讲了如何处理python中的异常,那么下面说说python中通常会有哪些异常,python中内置的异常如下表,简直太多了,比较幸运的python中的异常是基于类来构建的,所以只要知道基类就可以了,最常用就,你只要知道Exception ,这个就行了,基本上可以帮你应对绝大多数的error了,其他常用的还有AttributeError,KeyError等,也行你想问为什么不用一个Exception ,还有区分那么多,这个是根据要处理的数据来定的,比较只有序列类型的数据才有IndexError这个异常,一堆int 和float数据怎么样也不会出现IndexError的,无论如何,如果理解不了,就都用Exception 。
OK,本小节讲解先到这里,本期的作业,把刚刚提到的例子用自己的代码实践一遍,不用写open,直接让xy_file_list 等于讲到的数据。还是那句话,欢迎截图,截图越多的同学,今后的作业被选中,点评的概率越大。
本系列由解忧数据出品
专注城市和地理数据
三w点jieyoudata点com(www.jieyoudata.com)
找数据,来解忧——它难道不香吗
-一点分享 更多选择-
欢迎加入解忧数据
Jieyou data
http://www.jieyoudata.com
微信号 : 解忧数据
欢迎您的