了解并修复常见的 Python 语法错误

评论: 0

每种编程语言都有一套自己遵循的规则或语法。违反这些规则会导致我们所说的 python 语法错误,从而导致代码失效。无论你是刚刚开始编程,还是已经有多年的编程经验,这些问题都会发生在每个人身上。如果您曾想知道 "Python 中的语法错误是什么?本文将介绍最常见的语法错误,并解释如何在编码时修复它们。

Python 常见错误和修复

当 Python 出现语法错误时,它会提供一条指向问题的消息。该信息通常包括

  • 出现问题的文件名和行号。
  • 导致故障的具体代码行。
  • 一个粗体圆点 (^),指向解释器混淆的确切位置。
  • 故障描述,提示问题的性质。

让我们来看看程序员经常遇到的 Python 常见语法错误。

括号缺失或不匹配

初学者最常犯的错误之一就是忘记关闭括号。这在函数调用和嵌套结构中尤其常见。

例如

print("Hello, World!"

问题信息:

1.png

修复:

确保所有括号都正确闭合。

print("Hello, World!")

Python 缩进错误

缩进指定了代码块。如果缩进出现问题,可能会导致 Python 语法错误。

例如

def greet():
print("Hello, World!")

问题信息:

2.png

修复:

正确缩进代码块。

def greet():
    print("Hello, World!")

列表或词典中缺少标点符号错误

忘记在列表或字典的元素之间加上逗号是另一个常见错误。

例如

fruits = {"type": "sweert" "name": "orange"}

问题信息:

3.png

修复:

在 "sweert "和 "name "之间加上缺少的逗号。

fruits = {"type": "sweert", "name": "orange"}

滥用的 Python 保留关键字

不恰当地使用这些关键字也会导致语法问题。关键字是具有特殊含义的保留字。

例如

class = "Beginner"

问题信息:

4.png

修复:

选择一个非保留关键字的不同名称。

level = "Beginner"

非法变量名

变量名必须遵守特定的规则。使用非法变量名,如以数字开头或包含空格,会导致 Python 语法错误。

例如

2name = "John"

问题信息:

5.png

修复:

使用有效的变量名。

name2 = "John"

未闭合字符串

字符串必须用引号括起来。忘记关闭字符串会导致语法问题。

例如

message = "Hello, World!

问题信息:

6.png

修复:

确保用相同类型的引号结束字符串。

message = "Hello, World!"

复合语句中缺少冒号

如果在复合条件语句(如 if、for、while 或 def)末尾缺少冒号(:),就会出现语法问题。

例如

def greet()
    print("Hello, World!")

问题信息:

7.png

修复:

在复合语句末尾加上冒号。

def greet():
    print("Hello, World!")

错置的 Python 赋值操作符

错误使用操作符会导致 Python 语法错误。这包括赋值操作符和比较操作符。

例如

if x = 10:
    print("x is 10")

问题信息:

8.png

修复:

使用正确的比较运算符。

if x == 10:
    print("x is 10")

避免使用 Python 时经常犯错的技巧

  1. 在编辑器中编写或修改代码时,使用 Jupyter 笔记本或 VS Code 进行编辑,可以突出显示常见的迹象和问题。
  2. 以增量方式编写和测试代码:这能帮助你及早检查 Python 代码中的语法错误,并在它们变得难以追踪之前加以修正。
  3. 缩进一致:坚持使用空格或制表符进行缩进,以避免混淆和出现问题
  4. 使用着色工具:在代码上运行 pylint 或 flake8,检查可能存在问题的部分以及是否符合编码标准。
  5. 参考文档:随身携带官方文档,以了解语言的语法规则和惯例。

在实践中处理语法错误

让我们来看看一个简单的网络扫描脚本,它是否会遇到任何 bug,并帮助我们了解如何在 python 内置调试器 pdb 中修复语法错误。

使用 pdb 调试网络搜索脚本

原编码

import requests
from bs4 import BeautifulSoup

url = "https://example.com"
response = requests.get(url)
soup = BeautifulSoup(response.content, 'html.parser')

titles = soup.find_all("h1")
for title in titles
    print(title.text)

问题信息:

9.png

修复:

在 for 循环后加上缺少的冒号。

import requests
from bs4 import BeautifulSoup

url = "https://example.com"
response = requests.get(url)
soup = BeautifulSoup(response.content, 'html.parser')

titles = soup.find_all("h1")
for title in titles:
    print(title.text)

使用 pdb 进行调试:

在循环前添加以下一行,以启动调试器。

import pdb; pdb.set_trace()

添加带有断点标记的遮光代码:

import requests
from bs4 import BeautifulSoup

url = "https://example.com"
response = requests.get(url)
soup = BeautifulSoup(response.content, 'html.parser')

titles = soup.find_all("h1")
import pdb; pdb.set_trace()
for title in titles:
    print(title.text)

运行脚本时,pdb 调试器将在断点处启动。

> /path/to/your/script.py(10)()
-> for title in titles:
(Pdb)

调试命令

  • n(next):执行下一行代码。
  • c(继续):继续执行,直至到达下一个断点。
  • p variable_name:打印变量名的值。

例会:

(Pdb) n
> /path/to/your/script.py(11)()
-> print(title.text)
(Pdb) p titles
[<h1>Example Domain</h1>]
(Pdb) c
Example Domain

有了 pdb,您可以连续步进您的程序,观察不同变量的值,了解代码是如何执行的,从而快速发现并解决问题。

避免 Python 运行时出错

使用 pdb,你可以逐步检查你的程序,检查重要变量的值,并跟踪控制流以追踪错误和逻辑错误。除以零、访问列表中超出范围的项目或使用未定义的变量等常见问题都可以通过这种方法发现。

例如

numbers = [1, 2, 3]
print(numbers[3])

问题信息:

10.png

修复:

确保您正在访问有效的列表索引。

print(numbers[2])

异常处理

Try-except 块可让你封装可能导致问题的代码。通过捕捉这些问题,即使代码中出现语法错误,程序也能继续顺利运行。

例如

try:
    result = 10 / 0
except ZeroDivisionError:
    print("You can't divide by zero!")

最终想法

熟悉 Python 中的常见错误并查看语法错误示例是每个开发人员都应该做的事情。您对诊断信息关注得越多,修复得越快,您的代码就会运行得越流畅。使用真正支持您工作的工具和提示。

评论:

0 评论