如下,在study.py模块,MyLogHandler类之后追加下述代码 LOGGING_CONFIG = { "version": 1, "disable_existing_loggers...,参数s接收handler中class配置项目的值。...self.importer(used) # 这里importer = staticmethod(__import__) # 所以此处代码等同于__import__(used) # 这里导入自定义日志处理器所在模块会导致模块中的...(config)放自定义日志处理类模块中,导致自定义日志处理类重复被执行的原因已经清楚了。...(config)放自定义日志格式化类模块中,也可能导致重复执行
在Python中,异常也是对象,可对它进行操作。... print e 常见异常类型 AttributeError 试图访问一个对象没有的树形,比如foo.x,但foo没有属性x IOError 输入输出异常;基本是无法打开文件错误...模块 一、概述 在实际项目中,需要对一些数据进行日志记录,并将日志记录到不同的存储单元中,例如数据库,文本,或者推送到图形化界面中,当需要时发现自己实现一个日志库其实是要很大的代价,因此,第三方的日志库上进行定制化处理...这意味着,无需把logger实例在各个模块中传递。...模块中, handle常见调用 Handler.setLevel(lel) # 指定被处理的信息级别,低于lel级别的信息将被忽略 Handler.setFormatter(
numbers = [1, 2, 3] numbers.remove(4) # ValueError: list.remove(x): x not in list 调试技巧: 使用in关键字检查元素是否在列表中...调试技巧: 使用dir()函数查看对象的方法和属性。...numbers = [1, 2, 3] print(numbers) # 输出:[1, 2, 3] 使用pdb模块 Python内置的pdb模块可以让你在代码中设置断点,逐行执行代码,检查变量值。...使用logging模块 logging模块比print()更强大,可以记录程序运行过程中的各种信息。...无论是使用print()函数、pdb模块、logging模块,还是分解复杂的列表推导式,这些方法都能帮助你更高效地定位和解决问题。希望这些内容对你有所帮助,并能在实际工作中提高你的调试效率。
7 总结: 全局可以设定,但自己模块可以根据自己的情况进行调整和修改 上述用于设置模块和模块对应函数或类的日志级别,通过上述的定义可以确定打印日志的级别和相关的配置情况 向在模块级别的进行配置和修改日志的级别设置...文件中结果如下 ? #!...logger的,如果父类没有,则继续寻找父类的,最终找到root,而root的默认设置是WARNING ---- 3 消息传递流程 在某个logger上产生某种级别的消息,首先和logger...比较来决定是否处理,如果没有一个handler,或者消息已经被处handler处理过了,则需要通过本logger的propagate属性是否是True,True则会把这个消息继续传递给父logger,父...---- 4 logger 实例初始化的paragate属性为True,及允许向父传递logger消息 ---- 5 logging.basicConfig ---- 如果root没有
也许在开发中没有太大体会,但是如果将软件部署到了生产环境中,一旦出现bug,没有日志,就很难对当时的情况进行追踪,有了日志,就可以根据日志尽可能的对当时的数据环境进行还原,方便debug。...3.1 记录日志之logging模块级函数 在logging模块中,分别给出一个模块级别函数与上面说到的日志级别相对应,用于输出对应级别日志记录: 函数 说明 logging.debug(msg, *args...上表中的参数format可以通过logging模块中定义好模式来设定值: 字段/属性名称 使用格式 描述 asctime %(asctime)s 将日志的时间构造成可读的形式,默认情况下是‘2019-03...在开发过程中,经常出现多个模块都需要记录日志的情况,也许你想到的做法是在一个模块中配置好一个logger并实例化,在需要用到的模块中进行导入,但如果不同模块的日志器配置有区别时,这种方法就不适用了,若是为每个模块都定义一个...掌握本篇内容,感觉在开发中基本没有问题。
二 模块 在Python中,一个.py文件就称之为一个模块(Module),提高了代码的可维护性,可以避免函数名和变量名冲突(尽量不与内置函数冲突)。...import某个模块时,Python解释器会搜索当前目录、所有已安装的内置模块和第三方模块,搜索路径存放在sys模块的path变量中。...可以在except后面写else,没有错误发生时,自动执行else: try: print('try...')...logging模块可以记录错误信息之后,继续执行并正常退出,还可以通过配置,把错误信息记录到日志中,方便排查。...在将来修改的时候,可以极大程度地保证该模块行为仍然是正确的。
(本文中的 logger 为其实例)和 logging.Handler 的 level 属性,就表示对应实例的日志等级。...logging 之 Handler✦ 在解答上一节提出的问题之前,让我们回顾一下第一期的内容,既然 logging 模块是通过 Handler 来输出日志的,本节就先介绍 logging 模块的两大 Handler...首先讲结论,logger 在没有 handler 的情况下,其本身是不具备输出消息能力的,streamHandler 的第一个例子已经说明了这个问题。...这其实是 logging 模块的保护机制,对于 warning 和 error 级别的消息,如果消息的日志等级大于 logger 的日志等级,且 logger 没有配置任何的 handler,则会调用...追根溯源,是因为 pytorch 1.10 的 DistributedDataParallel 模块在 forward 过程中调用了 logging.info (https://github.com/
logging模块是Python内置的标准模块,主要用于输出运行日志,可以设置输出日志的等级、日志保存路径、日志文件回滚等; ⭐四、日志级别 在 logging 模块中,日志级别用于描述日志的重要程度。...info message') ❤️六、记录日志-处理器handler 在 logging 模块中,处理器(handler)是一种组件,可以将日志记录到不同的位置,例如输出到文件、发送到电子邮件、发布至网络等等...七、记录日志-格式化记录 在 logging 模块中,格式化记录(Formatted log record)是一种将日志消息格式化为字符串的方式,以便于输出和阅读。...logging模块中定义好的可以用于format格式字符串说明 字段/属性名称 使用格式 描述 asctime %(asctime)s 将日志的时间构造成可读的形式,默认情况下是‘2016-02-08...☔八、记录日志-配置logger 在 logging 模块中,可以使用 basicConfig() 函数或者通过编程的方式来配置 logger 对象的属性和行为。
_request = request #将父类的request存放在了自己的_request中,这样我们可以通过对象点属性的方法方法wsgi request的属性和方法也可以通过对象点_...的drf配置中配置EXCEPTION_HANDLER,指向自定义的exception_handler函数 2.drf出现异常会回调exception_handler函数,携带异常对象和异常相关信息,在exception_handler...函数中完成异常信息的返回以及异常信息的logging日志。...'} 在exception_handler文件中重写exception_handler # 一定要在settings文件中将异常模块配置自己的异常处理函数 from rest_framework.views...渲染模块在APIView中的导入方式renderer_classes = api_settings.DEFAULT_RENDERER_CLASSES,它的作用是Postman请求返回结果是json,浏览器请求结果是经过渲染的页面
4. logging模块定义的格式字符串字段 我们来列举一下logging模块中定义好的可以用于format格式字符串中字段有哪些: 字段/属性名称 使用格式 描述 asctime %(asctime)...此时会发现控制台中已经没有输出日志内容了,但是在python代码文件的相同目录下会生成一个名为'my.log'的日志文件,该文件中的内容为: 2017-05-08 14:29:53,783 - DEBUG...如果没有异常信息则添加None到日志信息中。 stack_info: 其值也为布尔值,默认值为False。如果该参数的值设置为True,栈信息将会被添加到日志信息中。...1. logging日志模块四大组件 在介绍logging模块的日志流处理流程之前,我们先来介绍下logging模块的四大组件: 组件名称 对应类名 功能描述 日志器 Logger 提供了应用程序可一直使用的接口...说明: 如果有需要,也可以在filter(record)方法内部改变该record,比如添加、删除或修改一些属性。
8.1 错误处理 在程序运行的过程中,如果发生了错误,可以事先约定返回一个错误代码,这样,就可以知道是否有错,以及出错的原因。在操作系统提供的调用中,返回错误码非常常见。...此外,如果没有错误发生,可以在except语句块后面加一个else,当没有错误发生时,会自动执行else语句: try: print('try...')...Python内置的logging模块可以非常容易地记录错误信息: # err_logging.py import logging def foo(s): return 10 / int(s)...这种以测试为驱动的开发模式最大的好处就是确保一个程序模块的行为符合我们设计的测试用例。在将来修改的时候,可以极大程度地保证该模块行为仍然是正确的。...设想你的测试需要启动一个数据库,这时,就可以在setUp()方法中连接数据库,在tearDown()方法中关闭数据库,这样,不必在每个测试方法中重复相同的代码: class TestDict(unittest.TestCase
引言 logging 的基本用法网上很多,这里就不介绍了。在引入正文之前,先来看一个需求: 假设需要将某功能封装成类库供他人使用,如何处理类库中的日志?...我在之前的博客 Python:logging.NullHandler 的使用 中介绍了 peewee 框架中的日志输出,简单来说就是 peewee 中定义了一个名为peewee 的 Logger 并添加了一个...logging 中定义了一个名为 root 的 Logger 作为所有 Logger 的根节点,root 的 parent 属性为 None。root 是全局的。...如果想只输出一次,可以删掉 logB 中的 Handler。当然,这也是有用处的,尤其是当你手头没有日志管理工具的时候。...例如,主程序中需要输出所有的日志,以便了解程序整体的运行顺序,而某模块的日志,你想单独输出一份,以便清晰了解模块中的报错或者是执行顺序。
Logging.basicConfig()需要在开头就设置,在中间设置没有作用 通过logging.basicConfig可以设置root的日志级别,和日志输出格式。...如果传了,比如这里是mylogger,在输出日志时候,就会显示是mylogger下的 上面logging.info等,也是显示在root下的 a.setLevel(logging.INFO) 通过setLeverl...需要之前的logging.basicConfig()的设置,才会输出这个,因为logger的handler还没有加 handler类 通过handler对象可以把日志内容写到不同地方,python提供了十几种实用的...handler,比较常用的有: 类型 说明 StreamHandler 输出到控制台 FileHandler 输出到文件 BaseRotatingHandler 可以按时间写入到不同的日志中。...() 和 Handler.removeFilter() 为handler添加 和 删除一个过滤器对象 Formater类 字段/属性名称 使用格式 描述 asctime %(asctime)s
同样在日志中也是必须要记录的。...以 TimedRotatingFileHandler 为例,该 handler 可以在指定时间点创建新日志文件。...使用模块级的 logger 如果项目文件很多,有时我们可能希望在输出日志的同时,能够直到每条日志是由哪个文件(模块)记录的。...,每个 handler 都有一个名字,可以在下文使用,如例子中的 console 和 file。...为空的一种可能解决办法 然后在 app.py 程序中使用如下语句读入配置,并删除 logging.basicConfig() 语句,然后在各个模块创建 logger 即可(完整代码见 GitHub):
如果我们留心一下日志模块的方法,会发现有很多地方都要接受LogRecord参数。LogRecord有很多属性信息,对日志打印有帮助,可以参考16.6.6....运行代码之后,可以验证日志同时在终端输出和文件中输出。...16,742 - root - CRITICAL - critical 信息 2017-04-04 21:45:16,742 - root - DEBUG - 这些东西 是自定义信息 外部配置 前面都是在代码中配置日志的输出...,我们还可以将配置写到配置文件中,然后传递给日志模块。...模块,并将配置文件传递给logging.config模块的dictConfig方法。
昨晚在整理自己的python脚本的时候,想把其中一个脚本中的print函数全都改成logging包中的相关函数。...改完后一运行却出现了Exception AttributeError: 'NoneType' object has no attribute的错误,网上搜了一下没找到相关答案。...UTF-8 -*- # File: destrution_attribute_error_nonetype1.py # Description: python自动析构时出现Exception AttributeError...============ END ==================================") 2 执行后出现错误 执行上面的程序,在Linux终端上就会出现Exception AttributeError...由于logging模块中的类对象(包括成员变量、成员函数等)已经被析构了,所以当执行CMySQL对象的析构函数__del__中的logging.warning函数时会出现"'NoneType' object
Python标准库提供了logging模块,让我们也可以方便的在Python中打印日志。 日志介绍 完整的使用方法可以参考标准库文档。这里做一下简单介绍。 日志级别 日志级别有如下几种。...如果我们留心一下日志模块的方法,会发现有很多地方都要接受LogRecord参数。LogRecord有很多属性信息,对日志打印有帮助,可以参考16.6.6....运行代码之后,可以验证日志同时在终端输出和文件中输出。...,我们还可以将配置写到配置文件中,然后传递给日志模块。...模块,并将配置文件传递给logging.config模块的dictConfig方法。
12.Python3入门之异常、调试和测试 在程序运行过程中,总会遇到各种各样的错误....还有一类错误是完全无法在程序运行过程中预测的,比如写入文件的时候,磁盘满了,写不进去了,或者从网络抓取数据,网络突然断掉了。...异常就是程序运行时发生错误的信号(在程序出现错误时,会产生一个异常,若程序没有处理它,则会抛出该异常,程序的运行也随之终止),在python中错误出发的异常如下: 而错误分成两种: 1.语法错误(...常用异常 异常名称 描述 AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x IOError 输入/输出异常;基本上是无法打开文件 ImportError 无法引入模块或包...系统调用失败 ImportError 导入模块/对象失败 LookupError 无效数据查询的基类 IndexError 序列中没有此索引(index) KeyError 映射中没有这个键 MemoryError
接着上一篇继续分享 一个自动化测试框架一般配备日志管理模块,配备该模块主要是为了记录我们运行过程中的日志,在测试用例执行失败时,可以通过日志查找到失败的原因。...python内置了一个库logging,今天主要分享logging模块的基本使用。...( "%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s") # 定义一个格式器对象,参数是记录属性...,日志格式是 附上常用的记录属性 三、封装自己的日志记录对象 项目中,我们一般只用一个记录器对象,记录器对象是根据名字来,所以我们需要定义记录的记录器,让每个文件记录的日志都输出到同一文件里面..._logger logger = MyLogger().get_logger() # 记录定义一个logger对象,让其他文件只能获取该logger对象 在测试脚本使用logger #!
本章将介绍Python内建模块:日志模块 简单使用 最开始,我们用最短的代码体验一下logging的基本功能。...logging中的基础类 logging是python的一个基础模块,它在python中的源码位置如下: #主干代码 /usr/lib/python2.7/logging/__init__.py #扩展的...同时Handler类具有一个成员变量self.level,在第二节讨论的日志级别的机制,就是在Handler中实现的。...的子类,其中在logging源码中,有一个handler.py专门定义了很多复杂的handler,有的可以将log缓存在内存中,有的可以将log做rotation等。...:(167),some_loging_messsage 参考 python笔记_logging模块(一) logging代码 python 日志封装 Python中的logging模块
领取专属 10元无门槛券
手把手带您无忧上云