社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

Python 代码 Debug 的 10 个实用技巧

数据STUDIO • 4 周前 • 58 次点击  


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

1.使用print语句进行调试

使用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(0100)

2.利用Python的内置pdb模块

使用 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(35)

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

n:转到下一行代码。
s:进入函数调用。
c:继续执行,直到下一个断点。

3.利用IDE调试器

使用 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 )

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

检查startend的值。
看看scene_duration评估结果是什么。
跨到下一行进行计算important_event

4.利用日志记录获取更好的洞察力

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

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

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

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这比在代码中到处写语句(便签)要强大得多。我强烈推荐初学者使用这个!

5.仔细检查回溯

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

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

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

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
–– –– 实际的错误信息。

6.使用tryexcept进行错误处理

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

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

将可能引发错误的代码包装在try块中,并使用except块处理异常。这可以帮助你管理和理解错误,而不会导致程序崩溃。

例子

try:    
 risky_code() 
except Exception as e:    
print(f"An error occurred: {e}")

7. 用类型检查

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

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

命令

mypy your_script.py

8.使用断言进行测试

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

使用assert语句来验证代码中各个点的条件是否成立。断言可以帮助尽早发现逻辑错误。

例子

assert x > 0"x must be positive"

9.使用 Linters 分析代码

使用 linters 分析代码就像对你的写作进行语法检查一样。

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

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

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

命令pylint your_script.py

10. 使用代码分析器进行监控

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

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

使用分析工具cProfile来测量代码的性能并识别可能导致意外行为的瓶颈或区域。

命令python -m cProfile your_script.py

写在最后

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


🏴‍☠️宝藏级🏴‍☠️ 原创公众号『数据STUDIO』内容超级硬核。公众号以Python为核心语言,垂直于数据科学领域,包括可戳👉 PythonMySQL数据分析数据可视化 机器学习与数据挖掘爬虫 等,从入门到进阶!

长按👇关注- 数据STUDIO -设为星标,干货速递

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/176297
 
58 次点击