5个常见的Python错误及避免方法

2025 年 1 月 4 日 | 阅读 6 分钟

引言

在本教程中,我们将学习 Python 编程中五种常见的错误及其预防策略。Python 以其简洁易用而受到广泛赞誉。像任何编程语言一样,它也可能出现错误。了解如何识别和解决这些问题对于高效调试、节省时间以及避免未来的编码挑战至关重要。本教程将概述常见的 Python 错误和有效的故障排除技巧。

1. 语法错误

当 Python 解释器分析您的代码并发现不符合语法规则的错误时,就会发生 SyntaxError。一些语法错误的原因包括:

  1. 未闭合的字符串
  2. 拼写错误 Python 关键字
  3. 缺少某些开括号、闭括号、括号或花括号
  4. 缩进问题
  5. 赋值运算符 (=) 使用不当
  6. 在旧版本的 Python 中使用新的 Python 语法。

当发生语法错误时,会创建一个 traceback(堆栈跟踪)来帮助您识别问题。下面我们举一个例子:

输出

现在,我们运行上面的代码。第 1 行的语法是无效的,因为字典的第一个字符缺少一个冒号 (:),该冒号将字符 "Jack" 与值 20 分开。结果如下:

 
ERROR!
Traceback (most recent call last):
  File "<main.py>", line 1
    s = {"Jack" 20,
         ^^^^^^^^^
SyntaxError: invalid syntax. Perhaps you forgot a comma?   

traceback 消息包含多个插入符号 (^) 来指示遇到错误语法的位置。有时,它无法精确定位,但它通常会提供有关问题所在位置的线索。要解决此问题,请在恢复时考虑以下信息:

  1. 文档名称
  2. 行号
  3. 由插入符号 (^) 指示的位置
  4. 错误消息可以帮助您理解问题的性质。
  5. 在错误消息末尾包含其他问题可提供重要信息。

因此,正确的代码是:

输出

现在,我们运行上面的代码。输出如下:

 
Jack is 20 years old boy
Jil is 18 years old boy   

在这里,我们学习一些避免 Python 中语法错误的技巧:

  1. 在执行代码之前,请仔细检查是否有任何拼写错误或错误。
  2. 利用具有语法高亮显示的编辑器来轻松检测语法错误。
  3. 仔细检查错误消息以精确定位错误的具体位置。

2. 缩进错误

当代码中存在缩进问题时,Python 中会发生 IndentationError。常见的原因包括混合使用制表符和空格、不正确的空格、嵌套块不正确或语句开头有空格。

当发生 Indentation Error 时,会创建一个 traceback(堆栈跟踪)来帮助您识别问题。下面我们举一个例子:

输出

现在我们运行上面的代码,输出中会出现一条错误消息。输出如下:

 
ERROR!
Traceback (most recent call last):
  File "<main.py>", line 2
    print("The indentation is incorrect")
    ^^^^^
IndentationError: expected an indented block after 'if' statement on line 1

为了解决和避免此问题,请使用配置了 Black 等代码格式化程序的编辑器或 IDE,在键入时格式化您的代码。Pylance linter 可以帮助您识别错误。因此,正确的代码是:

输出

现在,我们运行上面的代码。输出如下:

在这里,我们学习一些避免 Python 中缩进错误的技巧:

  1. 每个缩进级别使用四个空格。
  2. 避免混合使用制表符和空格。
  3. 确保代码中的缩进一致。

我们可以使用具有自动缩进功能的代码编辑器来避免缩进错误。代码编辑器的示例是 PyCharm 或 Visual Studio Code。

3. 名称错误

在 Python 中,如果您使用了一个未定义或超出作用域的标识符,就会发生 NameError。如果您在赋值之前引用了变量,或者拼写错误了标识符,也可能发生此错误。下面我们举一个例子:

输出

现在我们运行上面的代码,输出中会出现一条错误消息。在这个例子中,age 变量未定义但已被使用。因此,Python 会抛出一个异常。输出如下:

 
ERROR!
Traceback (most recent call last):
  File "<main.py>", line 1, in <module>
NameError: name 'age' is not defined   

我们通过确保使用变量或函数名来解决此问题。检查拼写错误。还要确保您要使用的变量在输入中。在编辑器中设置 linter 将有助于您在开发过程早期捕获这些问题。因此,正确的代码是:

输出

现在,我们运行上面的代码。输出如下:

 
30   

以下是一些避免 Python 中名称错误的一些技巧:

  1. 请记住,所有变量和函数都必须在使用之前在代码中声明。
  2. 验证变量和函数名的拼写。区分大小写。
  3. 利用 Python 的内置调试工具,例如 print 语句。这些工具可以帮助您识别和解决名称错误。

4. 值错误

当函数接收到正确类型但值不正确的参数时,就会发生 "ValueError" 异常。例如,int() 函数期望一个整数字符串,如 "33";提供 "thirty-three" 这样的字符串将导致 ValueError。下面我们举一个例子:

输出

现在我们运行上面的代码,输出中会出现一条错误消息。输出如下:

 
ERROR!
Traceback (most recent call last):
  File "<main.py>", line 1, in <module>
ValueError: invalid literal for int() with base 10: 'thirty-three'   

另一个常见原因是向 `max()` 或 `min()` 函数传递空的可迭代对象。例如 max([])。要修复此问题,请确保向这些函数提供正确的数据类型和值。查阅特定函数的文档,以确保您的输入符合预期格式。在适当的情况下,使用 try-except 块可以优雅地处理潜在的用户输入错误,并避免可能导致程序崩溃的 ValueErrors。因此,正确的代码是:

输出

现在,我们运行上面的代码。输出如下:

 
33   

以下是一些避免 Python 中值错误的技巧:

  1. 验证用户输入。
  2. 使用 try-except 块。
  3. 检查空的可迭代对象。
  4. 查阅函数文档。
  5. 使用条件检查。
  6. 使用各种输入进行测试。
  7. 注意类型转换。
  8. 利用调试工具。

5. 类型错误

Python 中的 TypeError 异常表示您正在处理无效或不合格的对象数据类型。例如,尝试用数字拆分字符串。下面我们举一个例子:

输出

现在我们运行上面的代码,输出中会出现一条错误消息。输出如下:

 
ERROR!
Traceback (most recent call last):
  File "<main.py>", line 1, in <module>
TypeError: unsupported operand type(s) for /: 'str' and 'int'   

当尝试评估浮点数或整数等参数时,可能会发生此异常。当函数使用了错误的类型时,也可能发生这种情况。例如,将期望扩展的代码传递给 len() 函数可能会导致类型错误。此外,使用参数过少的函数或比较不同类型的数据也可能导致类型错误。因此,正确的代码是:

输出

现在,我们运行上面的代码。输出如下:

 
Hello CodersHello CodersHello CodersHello CodersHello Coders   

以下是一些避免 Python 中类型错误的技巧:

  1. 在处理之前,请确保输入是正确的类型。
  2. 使用 isinstance() 等函数来检查数据类型。
  3. 查阅函数文档以了解预期的参数类型。
  4. 根据需要将数据转换为适当的类型。
  5. 使用不同类型的输入测试代码,以捕获潜在的错误。
  6. 使用类型注解来明确预期的类型。
  7. 使用 linting 工具在运行时之前捕获类型问题。

结论

本教程向我们介绍了 5 种常见的 Python 错误及其避免方法。Python 是一种功能丰富的通用语言。但是,像任何语言一样,它也可能遇到错误。本教程涵盖了 Python 中一些最常见的错误及其解决方案。通过了解这些错误以及如何解决它们,您可以成为一名更熟练、更自信的 Python 程序员。