Python 错误和异常代码详解

作者:一去丶二三里 时间:2022-02-12 15:14:08 

程序中的错误一般被称为 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

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

来源:http://blog.csdn.net/liang19890820/article/details/77969468

标签:python,错误,异常
0
投稿

猜你喜欢

  • 远程连接mysql数据库注意事项记录(远程连接慢skip-name-resolve)

    2024-01-15 23:06:01
  • Python基于execjs运行js过程解析

    2021-08-10 22:56:47
  • Python为何不支持switch语句原理详解

    2023-03-27 08:37:27
  • 抽取oracle数据到mysql数据库的实现过程

    2024-01-14 03:07:12
  • pycharm + django跨域无提示的解决方法

    2021-11-07 21:15:39
  • 第一类工厂与哈希对象

    2009-12-28 13:14:00
  • Python使用Selenium爬取淘宝异步加载的数据方法

    2021-05-17 05:31:57
  • Python多线程编程(三):threading.Thread类的重要函数和方法

    2021-04-22 09:02:47
  • python实现抖音视频批量下载

    2023-12-06 10:30:20
  • 函数式编程让JS更优美

    2008-06-10 12:40:00
  • 使用python Telnet远程登录执行程序的方法

    2022-12-22 11:56:57
  • 详解mysql8.0创建用户授予权限报错解决方法

    2024-01-26 08:58:31
  • 基于RequireJS和JQuery的模块化编程日常问题解析

    2024-04-19 10:17:04
  • 自动清空站点目录下所有文件

    2009-06-24 11:11:00
  • python用selenium打开chrome浏览器保持登录方式

    2022-02-19 10:28:08
  • python模块的安装以及安装失败的解决方法

    2023-09-14 06:33:04
  • bootstrap-table formatter 使用vue组件的方法

    2024-04-29 13:12:37
  • 关于MySQL与Golan分布式事务经典的七种解决方案

    2024-01-15 00:49:33
  • Python机器学习应用之支持向量机的分类预测篇

    2023-08-29 20:42:55
  • 深入浅析JavaScript中的arguments对象(强力推荐)

    2024-04-25 13:12:46
  • asp之家 网络编程 m.aspxhome.com