Python代码调试Debug的实用技巧分享

 更新时间:2024年11月28日 10:08:52   作者:星辰聊技术  
我们日常写代码过程中,难免会写出各类错误,这些错误可能是语法错误、逻辑错误或运行时错误,所以本文为大家分享了一些Python调试Debug的技巧,感兴趣的可以了解下

我们日常写代码过程中,难免会写出各类错误,这些错误可能是语法错误、逻辑错误或运行时错误。我们可以使用最复杂的答案是来检测到错误。也可以通过仔细阅读回溯、使用调试工具、使用 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(0, 100)

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(3, 5)

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

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 )

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

检查start和end的值。看看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 <module>
    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.使用try和except进行错误处理

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

安全带(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

到此这篇关于Python代码调试Debug的实用技巧分享的文章就介绍到这了,更多相关Python代码调试Debug内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • pyhton学习与数据挖掘self原理及应用分析

    pyhton学习与数据挖掘self原理及应用分析

    这篇文章主要为大家介绍了深入分析pyhton中的self原理及应用,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2021-11-11
  • python可视化数据分析pyecharts初步尝试

    python可视化数据分析pyecharts初步尝试

    这篇文章主要为大家介绍了python可视化数据分析pyecharts初步尝试,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2022-04-04
  • 使用PYTHON接收多播数据的代码

    使用PYTHON接收多播数据的代码

    一个PYTHON脚本,能够在LINUX上发送多播数据。其实编制起来也不算太麻烦。具体代码如下
    2012-03-03
  • python实现横向拼接图片

    python实现横向拼接图片

    这篇文章主要为大家详细介绍了python实现横向拼接图片,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • python pexpect ssh 远程登录服务器的方法

    python pexpect ssh 远程登录服务器的方法

    今天小编就为大家分享一篇python pexpect ssh 远程登录服务器的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-02-02
  • python的三目运算符和not in运算符使用示例

    python的三目运算符和not in运算符使用示例

    这篇文章主要介绍了python的三目运算符和not in运算符使用示例,需要的朋友可以参考下
    2014-03-03
  • Python3.5模块的定义、导入、优化操作图文详解

    Python3.5模块的定义、导入、优化操作图文详解

    这篇文章主要介绍了Python3.5模块的定义、导入、优化操作,结合图文与实例形式详细分析了Python3.5模块的定义、导入及优化等相关操作技巧与注意事项,需要的朋友可以参考下
    2019-04-04
  • Python列表常用函数使用详解

    Python列表常用函数使用详解

    这篇文章主要为大家介绍了Python列表常用的一些函数的使用详解,并通过一些简单的案例让大家更快的理解,感兴趣的可以跟随小编一起学习一下
    2021-12-12
  • 200个Python 标准库总结

    200个Python 标准库总结

    这篇文章主要给大家分享了200个Python 标准库总结,主要对文本、数据类型、数学等多个类型总结,既有一定的参考价值,需要的小伙伴可以参考一下
    2022-01-01
  • Python如何省略括号方法详解

    Python如何省略括号方法详解

    这篇文章主要介绍了Python如何省略括号方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03

最新评论