Python 代码 Debug 的 10 个实用技巧

摘要:我们日常写代码过程中,难免会写出各类错误,这些错误可能是语法错误、逻辑错误或运行时错误。我们可以使用最复杂的答案是来检测到错误。也可以通过仔细阅读回溯、使用调试工具、使用 linters 进行静态分析以及运行测试来检测错误,确保在运行之前和运行期间识别问题。

我们日常写代码过程中,难免会写出各类错误,这些错误可能是语法错误、逻辑错误或运行时错误。我们可以使用最复杂的答案是来检测到错误。也可以通过仔细阅读回溯、使用调试工具、使用 linters 进行静态分析以及运行测试来检测错误,确保在运行之前和运行期间识别问题。

使用print语句进行调试就像在你要去的路上放置路标,我个人在我的隐喻中相信这一点

就像路标引导你并告诉你身在何处一样,代码中的打印语句会显示变量的当前值以及程序执行到的位置。

通过检查这些“路标”,你可以确定自己是否走在正确的道路上或是否出了问题。

print(f"Hello, World!\n");
print语句以输出变量值并跟踪执行流程。这可以帮助你了解不同阶段发生的情况。例如:我们在行中使用了print语句作为路径(代码流)上的路标,告诉你你在哪里以及发生了什么。如果出现问题,你可以使用这些检查点来找出路径(代码)将你引入歧途的地方。def hiking_trip(start, destination):
print(f"从{start}开始徒步。") # 路标 1
midpoint = (start + destination) / 2
print(f"到达中点:{midpoint}.") # 路标 2
if midpoint > 50:
print("The midpoint is quite far!") # 路标 3
print(f"继续前往目的地:{destination}.") # 路标 4
return destination

hiking_trip(0, 100)
使用 Python 的pdb模块就像暂停电影并逐帧播放。

就像你可以暂停、倒带或快进电影来查看正在发生的事情一样,pdb 可让你随时暂停代码,检查正在发生的事情,并一步一步地浏览代码。这样,你可以仔细检查代码的每个部分,以找出可能出错的地方。

使用该pdb模块设置断点并以交互方式逐步执行代码。首先插入import pdb; pdb.set_trace要暂停执行的位置。命令

python -m pdb your_script.py

例如:例如,通过添加pdb.set_trace到你的程序中,执行将在该行停止,从而允许你与提示符进行交互pdb。一旦到达提示符。import pdb
def example_function(x, y ):
result = x + y
pdb.set_trace # 执行将在此处暂停
print(f"结果是{result}")
return result

example_function(3, 5)

你可以使用各种命令来调试,例如:

n:转到下一行代码。

s:进入函数调用。

c:继续执行,直到下一个断点。

使用 IDE 调试器就像在观看电影时拥有一个具有高级功能的遥控器。

你可以暂停、跳过场景并查看幕后细节,IDE 调试器可以让你设置断点、检查变量并以可视化的方式控制代码流程。

利用 PyCharm 或 VSCode 等 IDE 中的内置调试器。这些工具提供了用于设置断点、检查变量和逐步执行代码的图形界面。

例如:

在 PyCharm 或 VSCode 等 IDE 中调试程序时,你可以在代码中所需的关键点设置断点,类似于在重要场景暂停电影。随时彻底检查变量,就像看到电影幕后的细节一样。一次执行一行代码,就像使用遥控器在电影中逐帧跳过一样。

def movie_scene(start, end):
scene_duration = end - start # 这是代码的“电影长度”
important_event = start + scene_duration // 2 #“电影”的中点
return f"重要事件发生在{important_event}秒。"

movie_scene( 0 , 120 )

当调试器暂停执行时,你将能够执行以下命令:

检查start和end的值。

看看scene_duration评估结果是什么。

跨到下一行进行计算important_event。

使用日志记录而不是打印语句就像保存详细的日记而不是便签。

如果你需要快速记账,可以使用打印语句,它可以像便签一样工作,便签可以为你提供快速提醒,而日记(记录)可以让你记录不同级别的细节,从随意的观察到关键问题。

日志记录稍微复杂一些。你可以根据日志的重要性查看它们,并调整要查看的详细信息,从而帮助你更系统地跟踪代码中发生的情况。

import logging
logging.basicConfig(level=logging.DEBUG)
logging.DEBUG('这是一条调试消息')
用 Python 的模块替换print语句logging。日志可以记录不同级别的消息(DEBUG、INFO、WARNING、ERROR、CRITICAL),并控制显示的详细信息量。例如:

DEBUG:详细信息,用于诊断问题。

INFO:确认一切如预期进行。

WARNING:表示发生了意外的事情,但是程序仍然在运行。

ERROR:更严重的问题,程序可能无法继续运行。

CRITICAL:一个严重的问题,意味着该程序可能无法继续运行。

import logging

# 配置日志记录以显示所有级别
logstash.basicConfig(level=logging.DEBUG)

def hill_log ( start, destination ):
logstash.info(f"从{start}开始徒步到{destination}。") # 正常流程的 INFO 级别
midpoint = (start + destination) / 2
logstash.debug(f"中点在{midpoint}。") # 详细信息的 DEBUG 级别
if midpoint > 50 :
logstash.warning("中点比预期的远!") # 潜在问题的 WARNING 级别
if destination - start > 100 :
logstash.error("这次徒步太长了!") # 重大问题的错误级别
if destination - start > 200 :
logstash.critical("不可能徒步!目的地太远!") # 严重问题的 CRITICAL 级别
return destination

hill_log(0, 250)
在此示例中,你可以看到每个日志级别如何更加井然有序,并帮助你根据重要性显示信息,就像日记一样,它能让你理清自己的旅程。此外,它还能让你随时筛选或查看日志,print这比在代码中到处写语句(便签)要强大得多。我强烈推荐初学者使用这个!

仔细检查回溯就像跟着地图去寻找你在徒步旅行中迷路的地方一样。

地图(回溯)显示你所走的确切路径,并突出显示出错的地方。通过在地图上仔细追溯你的步骤,你可以准确地找出错误发生的位置并了解导致错误的原因,从而帮助你回到正轨。

仔细阅读错误消息的完整回溯。它们提供了有关错误发生位置和原因的详细信息,可帮助你查明问题所在。

Traceback(most recent call last):
File "example.py", line 8, in
main
File "example.py", line 5, in main
result = divide_numbers(x, y)
File "example.py", line 2, in divide_numbers
return a / b
zeroDivisionError: division by zero

ZeroDivisionError: division by zero

–– –– 实际的错误信息。

except进行错误处理就像攀爬时佩戴安全带。

安全带(try 块)允许你继续攀爬(代码执行),但如果你滑倒(发生错误),安全带会抓住你(except 块),防止跌落(程序崩溃)。这样,你就可以安全地浏览代码中的危险部分,而不会突然停止一切。

将可能引发错误的代码包装在try块中,并使用except块处理异常。这可以帮助你管理和理解错误,而不会导致程序崩溃。例子try:
risky_code
except Exception as e:
print(f"An error occurred: {e}")

就像在开始烹饪之前要检查配料是否正确且数量正确一样,类型检查可在运行代码之前确保变量和函数具有正确的类型。这可以帮助你尽早发现潜在的混淆(类型相关错误),防止问题在以后破坏你的程序。

使用类型提示和工具mypy执行静态类型检查并在运行之前捕获类型相关的错误。命令mypy your_script.py

你使用断言检查代码中的条件在特定点是否正确。如果某些东西看起来不自然,断言会立即捕捉到它,帮助你发现并修复逻辑错误,以免它们造成更大的问题。

使用assert语句来验证代码中各个点的条件是否成立。断言可以帮助尽早发现逻辑错误。例子assert x > 0, "x must be positive"

就像语法检查器会突出显示文本中的错误、不恰当的措辞和风格问题一样,

linter 会扫描你的代码,查找语法错误、编码风格违规和潜在错误。这有助于你清理代码,使其更易读、更一致且无错误。

使用 pylint 或 flake8 等 linters来捕捉语法错误、文体问题和潜在错误。

命令

使用代码分析器就像使用健身追踪器来监控你的锻炼一样。

为什么我要对健身追踪器说这些,因为就像健身追踪器可以测量你的表现,识别需要改进的地方,并在需要时为你提供指导一样,代码分析器也可以跟踪同样的工作。你的程序如何运行并突出显示其运行速度变慢或遇到问题的地方。这有助于你优化代码并提高其效率。

命令

在本文中,我们探讨了识别代码或项目中的错误的各种方法和做法。无论你是初学者还是大佬级,这些技巧对于发现错误都非常有用。我们介绍了十种不同的技巧,每种技巧都用简单的类比来解释,以帮助你掌握基础知识。

来源:香寒教育

相关推荐