Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将消息从python2.7记录到python3.9,反之亦然_Python_Python 3.x_Python 2.7_Python Logging - Fatal编程技术网

将消息从python2.7记录到python3.9,反之亦然

将消息从python2.7记录到python3.9,反之亦然,python,python-3.x,python-2.7,python-logging,Python,Python 3.x,Python 2.7,Python Logging,我是python新手,尝试将应用程序从python2.7移植到python3.9,但在将消息记录到文件时遇到了问题 我已设置日志记录配置 logging.basicConfig(filename='example.log',encoding='utf-8',level=logging.DEBUG)和 尝试将日志写入文件时,会出现错误 logging.info(“CRL_TO_PEM_CMD=,CRL_TO_PEM_CMD)给出了2.7和3.9中的以下错误 TypeError:在字符串格式化过程中

我是python新手,尝试将应用程序从
python2.7
移植到
python3.9
,但在将消息记录到文件时遇到了问题

我已设置日志记录配置
logging.basicConfig(filename='example.log',encoding='utf-8',level=logging.DEBUG)

尝试将日志写入文件时,会出现错误

logging.info(“CRL_TO_PEM_CMD=,CRL_TO_PEM_CMD)
给出了2.7和3.9中的以下错误

TypeError:在字符串格式化过程中并非所有参数都已转换

logging.info(f“CRL_TO_PEM_CMD={CRL_TO_PEM_CMD}”)
在3.9中运行良好,在2.7中给出错误


如何编写同时适用于2.7和3.9的语句?

如果
CRL\u to\u PEM\u CMD
是字符串,则可以使用:

logging.info ("CRL_TO_PEM_CMD =" + CRL_TO_PEM_CMD)
否则,您需要先将其强制转换为
str

logging.info ("CRL_TO_PEM_CMD =" + str(CRL_TO_PEM_CMD))
顺便说一句,您可以使用支持Python 2和Python 3的字符串格式。它可以用于将每种类型的数据与字符串连接起来

e、 g


Python2和Python3上的默认日志记录样式都是。在
msg
中使用
%
样式的占位符,
logging
模块将根据需要插入其他参数

logging.info("CRL_TO_PEM_CMD = %s", CRL_TO_PEM_CMD )


不知道为什么会被否决,但它同时适用于字符串和数字,我不是python专家。无法投票:(我否决了这个答案,因为
日志记录
设计的全部要点是消息不会过早格式化。提出三种方法来绕过这个设计目标,而不是一种方法来正确使用
日志记录
,这是非常糟糕的建议。这看起来像是从
C
派生出来的,这是我们在高级python中编写代码的方式吗我不是python方面的专家,因为这接近于
C
,我将不会有任何问题记住@IrAM作为名称“printf formatting”这意味着,这确实是从C派生出来的。请注意,它不是高级或现代的Python–因为您询问的是10年前的Python2.7,答案必然排除了现代功能。谢谢@mistermiagi,这也很好。
logging.info("CRL_TO_PEM_CMD = %s", CRL_TO_PEM_CMD )