广告位联系
返回顶部
分享到

Python代码调试Debug的实用介绍

python 来源:互联网 作者:佚名 发布时间:2024-11-29 21:02:29 人浏览
摘要

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

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

1.使用print语句进行调试

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

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

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

1

print(f"Hello, World!\n");

在代码的关键点插入print()语句以输出变量值并跟踪执行流程。这可以帮助你了解不同阶段发生的情况。

例如:

我们在行中使用了print语句作为路径(代码流)上的路标,告诉你你在哪里以及发生了什么。如果出现问题,你可以使用这些检查点来找出路径(代码)将你引入歧途的地方。

1

2

3

4

5

6

7

8

9

10

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。一旦到达提示符。

1

2

3

4

5

6

7

8

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

1

2

3

4

5

6

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.利用日志记录获取更好的洞察力

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

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

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

1

2

3

import logging

logging.basicConfig(level=logging.DEBUG)

logging.debug('这是一条调试消息')

用 Python 的模块替换print()语句logging。日志可以记录不同级别的消息(DEBUG、INFO、WARNING、ERROR、CRITICAL),并控制显示的详细信息量。例如:

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

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

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

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

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

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.仔细检查回溯

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

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

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

1

2

3

4

5

6

7

8

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块处理异常。这可以帮助你管理和理解错误,而不会导致程序崩溃。

例子

1

2

3

4

try:   

 risky_code()

except Exception as e:   

print(f"An error occurred: {e}")

7. 用类型检查

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

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

命令

1

mypy your_script.py

8.使用断言进行测试

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

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

例子

1

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


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 :
相关文章
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计