Python 错误和异常代码详解


Posted in Python onJanuary 29, 2018

程序中的错误一般被称为 Bug,无可否认,这几乎总是程序员的错。。。

程序员的一生,始终伴随着一件事 - 调试(错误检测、异常处理)。反反复复,最可怕的是:不仅自己的要改,别人的也要改。。。一万头草泥马奔腾而过!

错误

程序错误,主要分为三类:

  • 语法错误
  • 逻辑错误
  • 运行时错误

语法错误

语法错误(也称:解析错误):是指不遵循语言的语法结构引起的错误(程序无法正常编译/运行)。
在编译语言(例如:C++)中,语法错误只在编译期出现,编译器要求所有的语法都正确,才能正常编译。不过对于直译语言(例如:Python)来说,语法错误可能在运行期才会出现,而且不太容易区分语法错误及语义错误。

常见的 Python 语法错误有:

  • 遗漏了某些必要的符号(冒号、逗号或括号)
  • 关键字拼写错误
  • 缩进不正确
  • 空语句块(需要用 pass 语句)

例如,编写这样一个条件判断语句:

>>> if n < 5
 File "<stdin>", line 1
  if n < 5
      ^
SyntaxError: invalid syntax

由于 if 语句中缺少一个冒号(:),不符合 Python 语法,因此程序无法正常运行。

逻辑错误

逻辑错误(也称:语义错误):是指程序的执行结果与预期不符(程序可以正常运行,不会 Crash)。
与语法错误不同的是,逻辑错误从语法上来说是正确的,但会产生意外的输出或结果,并不一定会被立即发现。逻辑错误的唯一表现就是错误的运行结果。

常见的逻辑错误有:

  • 运算符优先级考虑不周
  • 变量名使用不正确
  • 语句块缩进层次不对
  • 在布尔表达式中出错

例如,要计算两个数的平均值:

>>> def average(a, b):
...   return a + b / 2 # 应为 (a + b) / 2
... 
>>>

虽然程序能够正常运行,但代码中缺少括号,由于运算符优先级(先乘除,后加减)的缘故,运算结果并不正确。

运行时错误

运行时错误:是指程序可以运行,但是在运行过程中遇到错误,导致意外退出。
当程序由于运行时错误而停止时,通常会说程序崩溃了。在 Python 中,这种运行时错误被称为异常。

Python 中的一些运行时错误:

  • 使用未定义的标识符(NameError)
  • 除数为 0(ZeroDivisionError)
  • 打开的文件不存在(FileNotFoundError)
  • 导入的模块没被找到(ImportError)

例如,除数为 0:

>>> 5 / 0
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero

每当出现这类运行时错误时,Python 就会创建一个异常对象。如果处理不当,会输出一个跟踪(Traceback)到那个错误,以及关于为什么会出现错误的一些细节。

内置异常的层次结构

Python 中有许多内置的异常,当出现相应的错误时,就会引发这些异常。

在 Built-in Exceptions 中,有一个内置异常的完整层次结构:

BaseException
+-- SystemExit
+-- KeyboardInterrupt
+-- GeneratorExit
+-- Exception
+-- StopIteration
+-- StopAsyncIteration
+-- ArithmeticError
| +-- FloatingPointError
| +-- OverflowError
| +-- ZeroDivisionError
+-- AssertionError
+-- AttributeError
+-- BufferError
+-- EOFError
+-- ImportError
+-- ModuleNotFoundError
+-- LookupError
| +-- IndexError
| +-- KeyError
+-- MemoryError
+-- NameError
| +-- UnboundLocalError
+-- OSError
| +-- BlockingIOError
| +-- ChildProcessError
| +-- ConnectionError
| | +-- BrokenPipeError
| | +-- ConnectionAbortedError
| | +-- ConnectionRefusedError
| | +-- ConnectionResetError
| +-- FileExistsError
| +-- FileNotFoundError
| +-- InterruptedError
| +-- IsADirectoryError
| +-- NotADirectoryError
| +-- PermissionError
| +-- ProcessLookupError
| +-- TimeoutError
+-- ReferenceError
+-- RuntimeError
| +-- NotImplementedError
| +-- RecursionError
+-- SyntaxError
| +-- IndentationError
| +-- TabError
+-- SystemError
+-- TypeError
+-- ValueError
| +-- UnicodeError
| +-- UnicodeDecodeError
| +-- UnicodeEncodeError
| +-- UnicodeTranslateError
+-- Warning
+-- DeprecationWarning
+-- PendingDeprecationWarning
+-- RuntimeWarning
+-- SyntaxWarning
+-- UserWarning
+-- FutureWarning
+-- ImportWarning
+-- UnicodeWarning
+-- BytesWarning
+-- ResourceWarning

注意: 当捕获异常或者决定应该继承哪个异常类时,这个层次关系非常有用。

总结

以上就是本文关于Python 错误和异常代码详解的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

Python 相关文章推荐
python二叉树遍历的实现方法
Nov 21 Python
python中的实例方法、静态方法、类方法、类变量和实例变量浅析
Apr 26 Python
Python批量更改文件名的实现方法
Oct 29 Python
关于Python数据结构中字典的心得
Dec 04 Python
python实现机械分词之逆向最大匹配算法代码示例
Dec 13 Python
python  Django中的apps.py的目的是什么
Oct 15 Python
pyecharts动态轨迹图的实现示例
Apr 17 Python
keras处理欠拟合和过拟合的实例讲解
May 25 Python
使用Nibabel库对nii格式图像的读写操作
Jul 01 Python
Python基于xlutils修改表格内容过程解析
Jul 28 Python
详解pyqt5的UI中嵌入matplotlib图形并实时刷新(挖坑和填坑)
Aug 07 Python
python软件测试Jmeter性能测试JDBC Request(结合数据库)的使用详解
Jan 26 Python
python实现机器人行走效果
Jan 29 #Python
浅谈Python用QQ邮箱发送邮件时授权码的问题
Jan 29 #Python
Python实现识别手写数字 简易图片存储管理系统
Jan 29 #Python
详解Python自建logging模块
Jan 29 #Python
python抓取网页中链接的静态图片
Jan 29 #Python
Python实现识别手写数字 Python图片读入与处理
Mar 23 #Python
Python实现PS滤镜特效Marble Filter玻璃条纹扭曲效果示例
Jan 29 #Python
You might like
php&amp;java(二)
2006/10/09 PHP
PHP CURL模拟GET及POST函数代码
2010/04/25 PHP
Yii实现文章列表置顶功能示例
2016/10/18 PHP
yii2局部关闭(开启)csrf的验证的实例代码
2017/07/10 PHP
PHP7引入的&quot;??&quot;和&quot;?:&quot;的区别讲解
2019/04/08 PHP
php新建文件的方法实例
2019/09/26 PHP
TFDN图片播放器 不错自动播放
2006/10/03 Javascript
JavaScript DOM学习第六章 表单实例
2010/02/19 Javascript
EXTJS内使用ACTIVEX控件引起崩溃问题的解决方法
2010/03/31 Javascript
别了 JavaScript中的isXX系列
2012/08/01 Javascript
jQuery html()方法使用不了无法显示内容的问题
2014/08/06 Javascript
jQuery实现弹出窗口中切换登录与注册表单
2015/06/05 Javascript
jQuery弹出遮罩层效果完整示例
2016/09/13 Javascript
详解JavaScript中数组的reduce方法
2016/12/02 Javascript
jquery 插件重新绑定的处理方法分析
2019/11/23 jQuery
js实现简易ATM功能
2020/10/27 Javascript
python中base64加密解密方法实例分析
2015/05/16 Python
通过数据库对Django进行删除字段和删除模型的操作
2015/07/21 Python
Python面向对象编程中关于类和方法的学习笔记
2016/06/30 Python
关于Python中浮点数精度处理的技巧总结
2017/08/10 Python
python实现最长公共子序列
2018/05/22 Python
Python之用户输入的实例
2018/06/22 Python
TensorFlow基于MNIST数据集实现车牌识别(初步演示版)
2019/08/05 Python
idea2020手动安装python插件的实现方法
2020/07/17 Python
通过CSS3的object-fit来调整图片适配尺寸的技巧简介
2016/02/27 HTML / CSS
美国羊皮公司:Overland
2018/01/15 全球购物
极简鞋类,赤脚的感觉:Lems Shoes
2019/08/06 全球购物
通往英国高街的商店橱窗:Down Your High Street
2020/07/19 全球购物
运动会入场词50字
2014/02/20 职场文书
教师自我剖析材料(四风问题)
2014/09/30 职场文书
新员工入职欢迎词
2015/01/23 职场文书
本科毕业答辩开场白
2015/05/27 职场文书
追悼会家属答谢词
2015/09/29 职场文书
Python中的xlrd模块使用整理
2021/06/15 Python
Win11快速关闭所有广告推荐
2022/04/19 数码科技
Python find()、rfind()方法及作用
2022/12/24 Python