Python 错误与异常
错误 Error
编程中会出现三大类型的错误:
- 语法错误 SyntaxError:常常由于拼写错误造成
- 用法错误:要求计算机执行不合理的操作时,就存在用法错误,如传递不符合数据类型的数据。Python 的
NameError和TypeError消息通常都是这种类型的错误。当程序运行时弹出Traceback表示「程序出错停止时正在执行的内容」。- 当调用函数时出现这类错误,一般返回
Traceback来显示函数调用流程以尝试告诉你导致该错误的位置。 - 最后一行告诉发生了什么类型的错误
- 由于错误内容出现在最近的代码中,我们可以从最后开始分析这段错误信息。在(最后一行的)上一行显示了出错的部分,还提供了行号,基于
Traceback可以找到错误根源并解决问题(但注意,错误消息提供的行号可能不是实际需要更改的行)。
- 当调用函数时出现这类错误,一般返回
- 逻辑错误:程序能正常运行没有崩溃,但是行为和你想要的不一样,因为所写的和想要的不一样。
较为常见的一种错误类型是 Syntax Error 这种错误类型是在程序运行之前,对程序对代码进行语法检查时发现了问题。
Tip
参考:
Python 教程页面的错误和异常
语法错误 Syntax Error
没有遵守正确的 Python 语法时,无法解析代码就会发生语法错误。
如多输入或少输入了括号,常有一个插入号 ^ 表示错误的位置
Tip
Python 在代码运行之前就进行语法错误的检测
异常 Exception
异常 Exception 是在代码运行时出现的问题与错误有区别,其中特别注意异常不包括语法错误。异常值是 python 中内置的一类值,如 NameErro 或 TypeError。
当代码导致异常发生也称为抛出异常,通过 Python 输出的异常值可以知道代码发生了何种错误。
索引错误 IndexError
一般是索引超出了范围导致 IndexError
值异常 ValueError
类型正确,值不符合
变量名错误 NameError
一般引用一个未定义的变量名
ZeroDivisionError
在运算中以 0 作为除数引起的错误
处理异常
Try 语句
使用 try 语句处理异常,可以在遇到指定的异常值时执行特定的代码,避免程序崩溃。
try 语句有4种子句:
try是唯一必需的子句,子句下缩进的代码块是首先运行的except下缩进的代码块是在运行try代码块时遇到异常后执行的。默认是遇到所有异常都会运行该代码块,可以在关键字except后指定特定类型的异常才运行该代码块。else在运行try块时没有遇到异常时才运行的代码块finally在离开try语句前,在任何形式下都将运行finally块中的代码(即使要结束程序)
python
# 捕获在运行try代码块遇到的ValueError异常
try:
some code
except ValueError:
soem code
# 使用包含多种异常的元组可同时捕获多种异常
try:
some code
except (ValueError, KeyboardInterrupt):
some code
# 如果我们希望**根据异常执行不同的代码块**,可以添加多个`except`块。
try:
some code
except ValueError:
some code
except KeyboardInterrupt:
some code
访问错误消息
在处理异常时,可以访问其错误消息
python
try:
some code
except ZeroDivisionError as e:
some code
print("ZeroDivisionError occurred: {}".format(e))
🔨 编译结果
shell
ZeroDivisionError occurred: division by zero
或访问未指定的具体错误
python
try:
some code
except Exception as e:
some code
print("Exception occurred: {}".format(e))
Exception 是 Python 所有内置异常的 基础类。