python 调试技巧

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 文章说明编程过程中,出现BUG不可避免,所以经常要进行调试.在廖雪峰的python3教程中,有一篇专门讲调试的文章,简单列举了调试的几种方法,建议先进行阅读,了解一下。

文章说明

编程过程中,出现BUG不可避免,所以经常要进行调试.
廖雪峰的python3教程中,有一篇专门讲调试的文章,简单列举了调试的几种方法,建议先进行阅读,了解一下。

为更方便新手学习,我结合自身开发情况,进一步补充一下。

一.print大法

如果不是确定要记录到日志,一般用的最多的还是print。
print()内置函数,一般最初学习python的时候,就接触到了,这里再列举一下几种调试常用的print用法。

1.直接打印数字
print(111111111)

2.直接打印文字
print("进来了")

3.直接打印变量
print(name)

4.打印文字+变量
print("进来了"+name)

5.打印文字+变量
print("进来了" , name)

6.打印文字+变量
print("进来了,名字是%s,年龄是%d" % (name , age))

二.IDE断点调试

如图所示,为PyCharm的调试。
(注:图为网页分享,并非原创。找不到原图链接了,抱歉。)

img_2d37b16f09d1b36bfffd9dd2f5f86790.png

三.终极武器logging

python有一个标准库logging,用来管理日志。
通过整个标准库,可以进一步构建自己的日志模块。
如下是一个自定义的日志模板。
(注:整个模块是网友分享,并非原创。找不到原文链接了,抱歉。)

import time
import logging
from logging.handlers import TimedRotatingFileHandler
####################################
#日志级别大小关系为:CRITICAL > ERROR > WARNING > INFO > DEBUG > NOTSET,当然也可以自己定义日志级别。

print_level = logging.DEBUG    #打印级别控制
file_path = "D:/TestDemo/"        #定义日志存放路径
file_name = time.strftime('%Y%m%d', time.localtime(time.time()))  #文件名称

####################################
class Log():
    # 构造函数
    def __init__(self, name):
        self.filename = file_path + file_name + '.log'  # 日志文件名称
        self.name = name  # 为%(name)s赋值

        #创建日志器
        self.logger = logging.getLogger(self.name)

        # 控制记录级别
        self.logger.setLevel(print_level)

        # 控制台日志
        self.console_handler   = logging.StreamHandler()
        console_format = logging.Formatter('%(asctime)s - %(levelname)s - %(name)s[line:%(lineno)d] - %(message)s')
        self.console_handler.setFormatter(console_format)

        # 文件日志
        self.filetime_handler  = TimedRotatingFileHandler(self.filename, 'D', 1, 30) #保留30天,1月保存一个文件
        file_format = logging.Formatter('%(asctime)s - %(levelname)s - %(name)s[line:%(lineno)d] - %(message)s')
        self.filetime_handler.setFormatter(file_format)

        # 为logger添加的日志处理器
        self.logger.addHandler(self.console_handler)
        self.logger.addHandler(self.filetime_handler)

    #测试
    def debug(self, msg):
        self.logger.debug(msg)

    #信息
    def info(self, msg):
        self.logger.info(msg)

    #警告
    def warning(self, msg):
        self.logger.warning(msg)

    #错误
    def error(self, msg):
        self.logger.error(msg)

    #重大错误
    def critical(self, msg):
        self.logger.critical(msg)

    #抛出异常
    def exception(self, msg):
        self.logger.exception(msg)

    #关闭控制台日志
    def close_console(self):
        self.logger.removeHandler(self.console_handler)

    # 关闭文件日志
    def close_filetime(self):
        self.logger.removeHandler(self.filetime_handler)

本文如有帮助,敬请留言鼓励。
本文如有错误,敬请留言改进。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
6月前
|
安全 程序员 Python
Python中的异常处理与错误调试
【4月更文挑战第8天】本文探讨Python中的异常处理和错误调试,将其比喻为驾驶过程中的意外情况。异常是程序执行时的非正常事件,如文件缺失或网络故障,而错误是代码本身的逻辑或语法问题。Python通过try-except语句处理异常,确保程序在遇到问题时不会立即崩溃。错误调试则需定位问题根源,利用pdb等工具逐行检查代码。这两个技能对保持代码稳定性和可靠性至关重要,能增强程序应对意外的能力并帮助修复潜在问题。
40 1
|
6月前
|
开发框架 人工智能 Rust
Python 潮流周刊#12:Python 中如何调试死锁问题?
Python 潮流周刊#12:Python 中如何调试死锁问题?
50 0
|
7天前
|
存储 JSON 监控
告别Print,使用IceCream进行高效的Python调试
本文将介绍**IceCream**库,这个专门用于调试的工具显著提升了调试效率,使整个过程更加系统化和规范化。
26 2
告别Print,使用IceCream进行高效的Python调试
|
2月前
|
监控 Python Windows
python知识点100篇系列-pysnooper用于调试
PySnooper是一个便捷的Python调试工具,用于监控代码执行过程及局部变量的变化,替代繁琐的打印语句。作为GitHub上的热门开源项目,它通过装饰器自动记录代码执行细节。安装简便,支持多种平台,可通过pip安装。使用时,只需在目标函数上添加装饰器即可实时查看变量变化或将其记录至日志文件。此外,还支持使用with块对特定代码段进行调试。更多详细信息可参阅其官方使用文档。
python知识点100篇系列-pysnooper用于调试
|
3月前
|
JavaScript 前端开发 ice
简单实用,Python代码调试利器~
简单实用,Python代码调试利器~
47 4
简单实用,Python代码调试利器~
使用icecream优雅调试Python代码
在大型项目中,使用print()调试代码可能导致终端输出过多,难以分辨输出结果与代码的对应关系。为了更清晰地调试,可以采用Icecream库。通过使用Icecream,可以更有效地进行Python代码调试,同时保持代码的整洁性。
|
3月前
|
程序员 开发工具 Python
[oeasy]python0030_动态控制断点_breakpoints_debug_调试
[oeasy]python0030_动态控制断点_breakpoints_debug_调试
36 2
|
3月前
|
搜索推荐 JavaScript 前端开发
简单实用,Python代码调试利器/java代码的设计和解读
尽管有许多高级调试工具,但在多数情况下,`print()`仍是便捷之选。`icecream`库则将`print()`调试法发挥到极致,简化变量检查与信息输出,提升调试效率。无论是基本变量还是复杂数据结构,`icecream`都能轻松应对,并支持自定义输出格式,让你的调试工作更高效。下面,让我们一起探索`icecream`的更多实用功能吧!
20 0
|
3月前
|
搜索推荐 JavaScript 前端开发
简单实用,Python代码调试利器
简单实用,Python代码调试利器
|
3月前
|
监控 Java Serverless
Serverless 应用的监控与调试问题之PyFlink对于Python UDF的性能如何提升
Serverless 应用的监控与调试问题之PyFlink对于Python UDF的性能如何提升