ITPub博客

首页 > 应用开发 > Python > 好程序员Python培训分享Python编程中常见的异常处理

好程序员Python培训分享Python编程中常见的异常处理

原创 Python 作者:好程序员 时间:2020-07-16 17:43:44 0 删除 编辑

  好程序员Python 培训分享 Python 编程中常见的异常处理,今天将对 python 编程中经常会遇到的一些报错与异常的进行总结与分析,虽然不会面面俱到,但是可以提供一种面对这样的问题时的思考方法,会对 python 的编程能力的提高有所帮助。

  初学python 经常会遇到的一些错误:

  下面错误类型的先后顺序基本上是按照从0 到有一定基础的过程会遇到的一些报错问题:

  NameError :在刚开始接触编程的朋友,容易犯这个错误,没有声明定义对应引用的变量,即,你来了一个无中生有。找到对应的变量,声明即可。

  SyntaxError :这个出错,都是语法类型的错误,例如多个半括号,少个半括号, for 循环时,末尾忘记英文冒号等等。出现这个错误,说明你对 python 的语法很不熟悉,多练习就是。

  IndentationError :缩进不正确, python 语法不熟练的明显表现,采用 tab 键进行缩进比较比较方便,例外科普一个小技巧,在 jupyter 中如果要对一堆代码进行批量缩进时,选中这堆代码,按 tab 来进行缩进,按 shift+tab 代码整体前进。

  ImportError :开始出现这个错误,说明你有了一丢丢基础,开始要调包了。但是还不是很熟练 python 中第三方包的使用方法。这里具体说一下每一种方法的差异,就拿最常见的 pandas 来举例

  import pandas as pd

  导入pandas 包,记为 pd 。后续需要调用 pandas 库底下的子函数 API 时,这样操作: pd.read_csv 此时我们调用 pandas 下的一个文件读取函数 read_csv ,它支持许多格式的文件的读取,例如, csv,tsv,txt 等等,具体需要去探究。

  还有一种是:

  from pandas import *

  这个是导入pandas 一级下属的所有 API 接口,相当于把 pandas 的一堆工具散乱的扔给你,一是占空间,二是用起来你得记住对应的函数才行,而第一种可以采用 tab 补全的方法,知道 API 接口大概拼写即可。

  还有一种:

  from pandas import read_csv, concat

  这个就比较简洁,只把自己需要的拿出来即可,在调用特别大的包的时候,这种方法比较好,例如sklearn ,很少有见 import sklearn as sl 吧,就像一直负重前行。在知道自己具体要用哪几个 API 的情况下,这种最优。

  TypeError :这个类型的错误慢慢开始由于一些有些复杂的原因引起。例如:

  TypeError : argument of type 'int' is not iterable 此处是因为 int 不可迭代。

  TypeError: cannot unpack non-iterable int object 此处是循环的变量中的元素不是一个可以。这一类型的错误需要你对 python 有一些掌握,例如 dict key 是不可重复的等等,需要在错误中累积这一类的知识。

  MoudleNotFoundError :就是你导入的包当前是木有的,这里顺便说一下各种下载包的方式,首先就是在编译器里,此操作不论是在 Windows 下还是公司的 Linux 下都可以这样: !pip install module_name 感叹号为英文的

  但是如果是阿里云,腾讯云,百度的ai-stduio 这种云服务器的话,需要做一定的改变: !pip install --user module_name 这个是一个小 tip 。个人有一种预感,以后云服务器会越来越普及,至少是在大数据算法爱好者中, Windows 的,数据量稍微大一点,动不动就跑的死机,云服务器则不存在这个问题,而且现在慢慢开始有了限时免费的云服务器,再往以后可能就会像流量这样便宜。

  ValueError :这个通常是在对一个数据容器进行拆解的时候,拆出来的元素个数与赋值的变量个数不匹配,例如:

  a,b,c = ['1','1','1','1'] 里面四个元素,外面配三个变量,肯定报错

  ValueError: too many values to unpack (expected 3)

  当然还有其他的原因造成ValueError ,例如:

  ValueError: The truth value of a Series is ambiguous

  ZeroDivisionError :这个就是你在做除法时,除数为 0 所致, python2 python3 的除法有所不同,有时候容易犯这个错误。 python2 的只是取整数部分,不四舍五入,例如 :

  a=0.6

  1/a python2 中是会报错的。其他情况下报这个错,就需要检查一下你的对应变量的精度设置了,并且在循环指定条件逐步对某一初始为 0 的变量进行迭代累加的时候,也容易出现这个错误,例如,在机器学习算法或者推荐算法的召回率,准确率时,计算 hit ,数据质量较差时就容易出现这个问题。

  IndexError :索引出错了,超出范围。

  IndexError: list index out of range

  KeyError :出现 KeyError ,基本说明你开始会用 python 了,因为字典 dict python 中应用最为广泛的数据存储容器,学会字典的各种操作很重要。

  FileNotFoundError :可能是在你开始采用 python 进行一些数据分析预测,或者推荐算法,或者 nlp 或者 cv 什么的时候,文件的路径或者文件格式,文件名出错导致文件找不到。

  AttributeError :说通俗一些,就是某个数据结构或者类型没有某种操作,你却非要用这种操作,那就要报错了,例如:

  AttributeError: 'tuple' object has no attribute 'remove' 出现这样的错误的时候,说明对 python 各种东西学习的有些多,混淆了一些操作。例如 list 的元素添加是 append ,你非要用 update 来给 list 添加,而 update set 或者 dict 的,如下:

  AttributeError: 'list' object has no attribute 'update'

  MemoryError :开始遇到这个错误的时候,说明你的 python 基础基本掌握,就是在你在处理一个比较大的数据集的时候,你的程序太 low ,例如,各种循环,嵌套循环,电脑被你玩蒙圈了,内存不足。这个说明一点,要开始学习 python 的数据结构与算法了,正式开始难点了。一些像小顶堆,大顶堆,二叉树,动态规划,链表,队列的家伙开始出现在你的视野里,并且开始看不懂一些诡异的很巧妙的小算法。

所以这就验证了一个说法,python 入门容易,但请看清楚了,仅仅是入门容易,你不能一直站在门口吧,往里面走一点,你就要费点劲。因此,需要进一步去巩固基础的东西,这些日常的报错异常只是在反馈你的 bug ,自己的学习过程也是一个机器学习的 train test 的过程,学到东西开始用习题拟合,如果习题都是你做过的,抱歉,过拟合了,当上 test 的时候,你的正确率就大幅下降,你就需要修正你的训练集了;如果你是个懒家伙,习题没做几个,就直接上 test ,欠拟合了,结果还是不好。所以就是在这样的不断迭代优化的过程中,我们学习的知识模型的泛化能力越来越好。


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/69913864/viewspace-2705051/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-03-20

  • 博文量
    342
  • 访问量
    150256