python使用装饰器来统计函数被调用次数、格式化dict以及Python-smtplib邮件发送的IP name possibly forged问题解决

news2024/11/25 12:00:29

一、python调试:使用装饰器来统计函数被调用次数及格式化dict

    喜欢调试的时候显示数据并显示一些其它的信息,比如区分是哪次调用的调试信息,比如友好的显示dict等相对复杂的数据类型,所以这里涉及到两个方面。一是统计函数被调用次数;二是格式化展示dict数据。

    在类中对一个函数的调用次数进行统计比较方便,直接定义一个类属性来计数即可,但对于一个普通函数这样的方法就不能实现了,于是我们可以通过装饰器来实现。

    装饰器(Decorators)是Python的一个重要功能,它是一个可以修改其他函数的功能的函数。简单地说,装饰器可以让你在一个已经定义的函数的前后去执行其它代码,这有点像JAVA中的AOP切面编程。我们先写一个装饰器类,然后在调用的方法上注明这是一个装饰器,此时再调用方法就会执行显示一个分隔行,同时记录了当前是第几次调用这个调试显示函数,然后再打印要debug的数据。代码如下:

#定义装饰器
class CountClass(object):
    def __init__ (self, func):
        self.func = func
        self.count = 0

    def __call__ (self, *args, **kwargs):
        self.count += 1
		print("*"*20 + str(self.func.__name__) + ":" +str(self.count) + "*"*20)
        return self.func(*args, **kwargs)
		
#再来写一个被装饰的函数:
@CountClass
def show(data:any):
    print(data)

#调用
show(data = "123abc")

    针对第二个方面,格式化展示复杂数据,主要是dict类型数据。可以使用官方模块 pprint 格式化打印 dict 数据,python推出pprint正是因为print在显示复杂数据方面的不美观,比如打印一个dict,使用print显示一长串会看花眼。

import pprint
@CountClass
def show(data:any):
    
	if isinstance(data, dict):
		#使用pprint打印显示
		pp = pprint.PrettyPrinter(indent=4)
		pp.print(data)
		
		#打印json
		print(json.dumps(data, indent=4, separators=(', ', ': '), ensure_ascii=False))
	else:
		print(data)

    但在测试时发现pprint并没有生效,后来发现只有要显示的内容比较长时,pprint才会美观化显示内容,否则会直接展示。不过在使用中通过对比,pprint还是不如直接使用json.dumps来展示美观,一是pprint只对第一层级进行美化展示,对于dict嵌套dict,内部的dict不会被美化;二是pprint在显示的时候{与内容在一行,效果不咋样。

二、Python-smtplib邮件发送Relaying denied. IP name possibly forged[IP地址]

    使用PYTHON-smtplib需要先安装sendmail,使用apt install sendmail命令安装vcb即可,安装完成后sendmail的配置文件在/etc/mail/中,日志文件位于/var/log/目录中,mail.log、mail.err,查看这两个文件信息来定位问题。可以通过命令mail、mailq查看接收到的邮件和待发送的邮件。

$ whereis sendmail
sendmail: /usr/sbin/sendmail /usr/lib/sendmail /usr/share/sendmail

    进行邮件发送代码很少,引入模块定义几个参数执行就行了。代码示例如下:

import smtplib
from email.mime.text import MIMEText
from email.header import Header
import traceback

sender = 'my@cc.com'
receivers = ['user1@cc.com', 'user2@cc.com']

#四个参数
message = MIMEText('邮件信息主体', 'plain', 'utf-8')
message['Subject'] = Header('Python smtplib邮件发送测试', 'utf-8')
message['From'] = Header('测试邮件', 'utf-8')
message['To'] = Header('自己', 'utf-8')

try:
    smtpObj = smtplib.SMTP('localhost')
    smtpObj.sendmail(sender, receivers, message.as_string())
    print('发送成功...')
except:
    traceback.print_exc()
    print('Error: 发送失败')

    在执行过程中遇到报错:smtplib.SMTPRecipientsRefused: {'test@e.com': (550, b'5.7.1... Relaying denied. IP name possibly forged [172.17.0.3]')}。之前我已在服务器中进行了调试并且成功运行,但后面部署到docker容器中运行后就出现了上面的错误。从提示也很清楚看到IP地址不合法,此需要修改mail中的配置,进到mail服务器,在/etc/mail/access文件中添加如下一行:

Connect:  IP地址                  RELAY

        然后使用如下命令使上述编辑过的配置生效即可成功.

makemap hash /etc/mail/access.db < /etc/mail/access

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2202003.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Centos再生龙系统迁移

Centos再生龙系统迁移 1.准备工作1.1rufus镜像刻录软件1.2再生龙镜像1.3硬盘和U盘2.准备u盘启动工具2.1刻录再生龙镜像3.备份系统3.1选择U盘启动3.2选择分辨率3.3选择中文3.4选择默认键盘配置3.5使用再升龙3.6选择第一个,device-image硬盘/分区存到/来自镜像文件3.7选择local_…

运维问题0004:MM模块-操作MIGO过账报错“对象OFN_YR 2840 WE2840 的编码范围没有找到”

1、问题分析 当在SAP系统MM模块的MIGO过账时出现“对象OFN_YR 2840 WE2840的编码范围没有找到”错误&#xff0c;这通常是因为系统配置中缺少对应的编码范围。先来分析一下报错消息号信息&#xff1a;OFN_YR是后台自动凭证编号范围配置的事务代码;2840是工厂名称 ;WE2840是指接…

地理空间数据共享资源,爱好者进

地理空间数据共享资源&#xff0c;爱好者进 1、1986–2021年中国30m逐年耕地数据集 由于农田的空间和时间模式对食品安全和环境可持续性的供应至关重要&#xff0c;因此长期和准确的农田监测非常重要。研究团队开发了一种新颖、经济的年度农田映射框架&#xff0c;该框架集成…

【C++】适配器stack/queue/priority_queue使用和实现

目录 容器适配器 什么是容器适配器 ​编辑stack stack的了解和使用 使用举例 题目加深 模拟实现 功能实现 测试文件 ​编辑queue queue的了解和使用 使用举例 题目加深 模拟实现 功能实现 测试文件 priority_queue priority_queue的了解和使用 使用举…

基于SpringBoot项目评审系统【附源码】

基于SpringBoot项目评审系统 效果如下&#xff1a; 系统首页界面 学生登录界面 项目信息页面 项目申报页面 专家注册界面 管理员登录界面 管理员功能界面 项目评审界面 评审结果界面 研究背景 在当今快速发展的信息时代&#xff0c;项目评审作为项目管理的关键环节&#xff…

【网络】初识https协议加密过程

初识https协议加密过程 为什么不用http而要使用https常见的加密方式对称加密非对称加密数据摘要&&数据指纹 https的工作过程探究方案一&#xff1a;只使用对称加密方案二&#xff1a;只使用非对称加密方案三&#xff1a;双方都使用对称加密方案四&#xff1a;非对称加密…

毕设分享 基于协同过滤的电影推荐系统

文章目录 0 简介1 设计概要2 课题背景和目的3 协同过滤算法原理3.1 基于用户的协同过滤推荐算法实现原理3.1.1 步骤13.1.2 步骤23.1.3 步骤33.1.4 步骤4 4 系统实现4.1 开发环境4.2 系统功能描述4.3 系统数据流程4.3.1 用户端数据流程4.3.2 管理员端数据流程 4.4 系统功能设计 …

四、Java 概念知识简单了解

一、Java 的类、对象、方法和实例变量 一个 Java 程序可以认为是一系列对象的集合&#xff0c;而这些对象通过调用彼此的方法来协同工作。下面简要介绍下类、对象、方法和实例变量的概念。对象&#xff1a;对象是类的一个实例&#xff0c;有状态&#xff08;实例变量&#xff…

嵌入式面试——FreeRTOS篇(三) 消息队列和队列集

本篇为&#xff1a;消息队列和队列集篇 消息队列 1、FreeRTOS中的消息队列是什么 答&#xff1a; 消息队列是任务到任务、任务到中断、中断到任务数据交流的一种机制(消息传递)。 2、消息队列和全局变量的区别 答&#xff1a; 消息队列作用有点类似于全局变量&#xff0c;但消…

简单的网络爬虫爬取视频

示例代码爬取一个周杰伦相关视频 import requests# 自己想下载的视频链接 video_url https://vdept3.bdstatic.com/mda-qg8cnf4bw5x6bjs5/cae_h264/1720516251158906693/mda-qg8cnf4bw5x6bjs5.mp4?v_from_shkapp-haokan-hbf&auth_key1728497433-0-0-4a32e13f751e04754e4…

谷歌上架,应用明明没问题,咋就成了“恶意软件”?看看可能的原因

作为Google Play上架应用的开发者&#xff0c;大家的普遍感受&#xff1a;比起写代码&#xff0c;上架的过程简直更让人心力交瘁&#xff01;特别是涉及用户数据和隐私保护的时候&#xff0c;稍有疏忽&#xff0c;就可能面临应用被下架、甚至账号被封的风险。 最近听到很多开发…

6.存储过程中的游标使用(6/10)

存储过程中的游标使用 引言 在数据库编程中&#xff0c;游标&#xff08;Cursor&#xff09;是一种重要的数据库对象&#xff0c;它允许开发者逐行处理查询结果集。这对于需要对每一行数据进行特定处理的场景非常有用&#xff0c;如数据转换、数据清洗、复杂计算等。本文将详…

Qt 与 GTK:跨平台 GUI 开发利器,可用Python助力高效GUI编程

在现代软件开发中&#xff0c;图形用户界面 (GUI) 至关重要&#xff0c;它直接影响用户体验和软件的易用性。Qt 和 GTK 作为两种主流的跨平台 GUI 库&#xff0c;为开发者提供了构建精美且功能强大的应用程序的强大工具。本文将深入介绍 Qt 和 GTK 的特性&#xff0c;并探讨如何…

SwiftUI 6.0(iOS 18)新增的网格渐变色 MeshGradient 解惑

概述 在 SwiftUI 中&#xff0c;我们可以借助渐变色&#xff08;Gradient&#xff09;来实现更加灵动多彩的着色效果。从 SwiftUI 6.0 开始&#xff0c;苹果增加了全新的网格渐变色让我们对其有了更自由的定制度。 因为 gif 格式图片自身的显示能力有限&#xff0c;所以上面的…

springboot网站开发-mysql数据库字段varchar类型存储汉字的长度关系

springboot网站开发-mysql数据库字段varchar类型存储汉字的长度关系&#xff01; 如果你的数据表是utf-8编码&#xff0c;并且采用的是mysql数据库。设计自己的业务数据。那么&#xff0c;如果你采用是varchar类型的字段格式&#xff0c;一个汉字就是一个字节。 如图所示&#…

zookeeper API使用——znode的CRUD

这应该是目录 一、创建连接1.1构造函数1.2创建连接(封装) 二、节点操作2.1创建节点create语法代码 2.2获取节点数据getData语法代码 2.3获取子节点getChildren语法代码 2.4修改节点的值setData语法代码 2.5删除delete语法代码 以下的代码只能作为基础的语法使用&#xff0c;为了…

带隙基准Bandgap电路学习(二)

一、高低温性能测试 设置仿真环境温度为-40℃ &#xff0c;观察电路管子工作状态是否正确 环路相位裕度为53.1853 输出噪声曲线&#xff1a; 电源抑制PSR曲线&#xff1a; 设置仿真环境温度为85℃ &#xff0c;观察电路管子工作状态是否正确 环路相位裕度为53.7297 输出噪…

Windows 11 24H2版本有哪些新功能_Windows 11 24H2十四大新功能介绍

距离上次发布的23H2版本已经过去了一年时间&#xff0c;现在&#xff0c;Win 11的24H2版本终于等到了&#xff0c;微软已经全面公开发布Win11 24H2版本&#xff0c;版本号为26100.1742&#xff0c;此次官宣的版本包括了消费者版、商业版、LTSC 2024版等&#xff0c;各种语言版本…

旅游景区小程序|提供多元化服务,打造一站式旅游体验

今年国庆黄金周&#xff0c;各地精心筹备&#xff0c;打造了丰富多彩的文化旅游盛宴&#xff0c;吸引了来自四面八方的游客。凭借各地的自然风光、丰富的人文景观以及精彩纷呈的旅游活动&#xff0c;吸引众多游客。此次国庆旅游市场的火爆&#xff0c;不仅为当地带来了可观的经…

C语言预处理详解(上)(30)

文章目录 前言一、预定义符号二、#define定义标识符三、#define定义宏四、#define的替换规则五、带有副作用的宏六、宏和函数的对比七、#undef的作用八、# 和#的作用##的作用 总结 前言 C语言的入门学习差不多要到尾声了&#xff0c;感觉如何呢~   前文说编译的第一步就是预编…