- 3
- 0
- 约5.34千字
- 约 16页
- 2018-11-11 发布于江苏
- 举报
Python错误及异常总结汇总
Python错误及异常总结汇总
前言
程序员的一生中,错误几乎每天都在发生。在过去的一个时期, 错误要么对程序(可能还有机器)是致命的,要么产生一大堆无意义的输出,无法被其他计算机或程序识别,连程序员自己也可能搞不懂它的意义。一旦出现错误,程序就会终止执行,直到错误被修正,程序重新执行。所以,人们需要一个”柔和”的处理错误的方法,而不是终止程序。同时,程序本身也在不断发展,并不是每个错误都是致命的,即使错误发生,编译器或是在执行中的程序也可以提供更多更有用的诊断信息,帮助程序员尽快解决问题。然而,错误毕竟是错误,一般都是停止编译或执行后才能去解决它。一小段代码只能让程序终止执行,也许还能打印出一些模糊的提示。当然,这一切都是在异常和异常处理出现之前的事了。1. 错误
从软件方面来说,错误是语法或是逻辑上的。语法错误指示软件的结构上有错误,导致不能被解释器解释或编译器无法编译。这些错误必须在程序执行前纠正。当程序的语法正确后,剩下的就是逻辑错误了。逻辑错误可能是由于不完整或是不合法的输入所致;在其他情况下,还可能是逻辑无法生成,计算,或是输出结果需要的过程无法执行。这些错误通常分别被称为域错误和范围错误。
当 Python 检测到一个错误时,解释器就会指出当前流已经无法继续执行下去,这时候就出现了异常。2. 异常
对异常的最好描述是: 它是因为程序出现了错误而在正常控制流以外采取的行为。这个行为又分为两个阶段: 首先是引起异常发生的错误,然后是检测(和采取可能的措施)阶段。
第一个阶段是在发生了一个异常条件(有时候也叫做例外的条件)后发生的。只要检测到错误并且意识到异常条件,解释器会引发一个异常。引发也可以叫做触发或者生成,解释器通过它通知当前控制流有错误发生。Python 也允许程序员自己引发异常,无论是 Python 解释器还是程序员引发的,异常就是错误发生的信号,当前流将被打断,用来处理这个错误并采取相应的操作,这就是第二阶段。
对异常的处理发生在第二阶段。异常引发后,可以调用很多不同的操作,可以是忽略错误(记录错误但不采取任何措施, 采取补救措施后终止程序),或是减轻问题的影响后设法继续执行程序。所有的这些操作都代表一种继续,或是控制的分支,关键是程序员在错误发生时可以指示程序如何执行。
类似 Python 这样支持引发和处理异常(这更重要)的语言,可以让开发人员可以在错误发生时更直接地控制它们。程序员不仅仅有了检测错误的能力,还可以在它们发生时采取更可靠的补救措施。由于有了运行时管理错误的能力,应用程序的健壮性有了很大的提高。
异常和异常处理并不是什么新概念。它们同样存在于 Ada,Modula-3,C++,Eiffel,以及 Java 中。异常的起源可以追溯到处理系统错误和硬件中断这类异常的操作系统代码。在 1965 年左右,PL/1 作为第一个支持异常的主要语言出现,而异常处理是作为一个它提供的软件工具。和其他支持异常处理的语言类似,Python 采用了 “try/尝试” 块和 “catching/捕获” 块的概念,而且它在异常处理方面更有”纪律性”。我们可以为不同的异常创建不同的处理器,而不是盲目地创建一个”catch-all/捕获所有”的代码。3. python中常见异常
NameError:尝试访问一个未声明的变量
NameError表示我们访问了一个没有初始化的变量. 在 Python 解释器的符号表没有找到那个另人讨厌的变量. 我们将在后面的两章讨论名称空间, 现在大家可以认为它们是连接名字和对象的”地址簿”就可以了. 任何可访问的变量必须在名称空间里列出. 访问变量需要由解释器进行搜索, 如果请求的名字没有在任何名称空间里找到, 那么将会生成一个NameError异常.
ZeroDivisionError:除数为零
我们边的例子使用的是整数, 但事实上, 任何数值被零除都会导致一个ZeroDivisionError异常.
SyntaxError:Python 解释器语法错误
SyntaxError 异常是唯一不是在运行时发生的异常.它代表 Python 代码中有一个不正确的结构, 在它改正之前程序无法执行. 这些错误一般都是在编译时发生, Python 解释器无法把你的脚本转化为 Python 字节代码. 当然这也可能是你导入一个有缺陷的模块的时候.
IndexError:请求的索引超出序列范围
IndexError在你尝试使用一个超出范围的值索引序列时引发.
KeyError:请求一个不存在的字典关键字
映射对象, 例如字典, 是依靠关键字(keys)访问数据值的. 如果使用错误的或是不存在的键请求字
您可能关注的文档
- Nokia 8 Sirocco评测体验:一部真旗舰无线充电+骁龙835.doc
- Nokia X6千元机中的战斗机.doc
- Node.js语言将会告诉你如何打造专属于自己的区块链项目.doc
- NOR Flash行业趋势分析 浅谈NOR Flash原理及性能.doc
- NOLO VR打破VR行业壁垒 让所有 VR 头盔“动起来”.doc
- nova2拆机图解 这个价格值不值得购买.doc
- nRF5182嵌入式系统智能手环设计.doc
- NSA or SA市场5G建设最终还是采用了SA架构.doc
- NTC热敏电阻保护,涌浪电流限制方法.doc
- nubia Z11 mini拆解,看看这款以“小屏”为卖点的手机内部做工如何.doc
- Q9000四核CPU性能测试 浅谈Q9000性能提升.doc
- Q9000在T61上的运行效果.doc
- Python面试中一些常见的问题及其答案.doc
- Q50-ATS-IS发动机舱全方面对比解读.doc
- Qorvo专家最新产业应用观点 抓住5G新空口加速商用部署.doc
- QT+Opencv粒子滤波算法实现视频目标跟踪——如何选择跟踪算法.doc
- QLED量子点电视为什么会成为消费市场新宠?它到底有什么魅力?.doc
- Qualcomm MWC2016亮点集锦.doc
- Qualcomm Technologies分别与联想、OPPO、vivo和小米签署备忘录.doc
- QuickPlay迅速构建基于 FPGA 的高效应用.doc
原创力文档

文档评论(0)