logging TypeError: not all arguments converted during string formatting

MRAB python at mrabarnett.plus.com
Thu Sep 15 11:17:19 EDT 2016


On 2016-09-15 15:57, Daiyue Weng wrote:
> Hi, I am trying to record memory and CPU usages and load a logger from an
> external config file (logging.conf),
>
[snip]
>
> import logging
>
> import psutil
>
> logging.config.fileConfig('logging.conf')
>
> hardware_log = logging.getLogger(HARDWARELOGNAME)
>
> free_mem_gb_pre = psutil.virtual_memory().available / 1000000000.
> cpu_util_pct_pre = psutil.cpu_percent()
>
> hardware_log.info(cpu_util_pct_pre, free_mem_gb_pre)
>
>
> I got the following errors,
>
> --- Logging error ---
> Traceback (most recent call last):
>   File "C:\Continuum\Anaconda3\lib\logging\__init__.py", line 980, in emit
>     msg = self.format(record)
>   File "C:\Continuum\Anaconda3\lib\logging\__init__.py", line 830, in format
>     return fmt.format(record)
>   File "C:\Continuum\Anaconda3\lib\logging\__init__.py", line 567, in format
>     record.message = record.getMessage()
>   File "C:\Continuum\Anaconda3\lib\logging\__init__.py", line 330, in getMessage
>     msg = msg % self.args
> TypeError: not all arguments converted during string formatting

[snip]

>   File "C:\Users\dweng\PycharmProjects\lumar_ingestion\ingestion_workflow_modules\import_to_dataframe.py",
> line 61, in execute
>     hardware_log.info(cpu_util_pct_pre, free_mem_gb_pre)
> Message: 38.5
> Arguments: (8.87662592,)
>
>
> How to fix the problem?
>
The doc for logging.info says:

     logging.info(msg, *args, **kwargs)

In this line of your code:

     hardware_log.info(cpu_util_pct_pre, free_mem_gb_pre)

you're passing in 2 values.

The first (38.5) is being treated as the message template (a format 
string) and the second (8.87662592) as the value to be put into the 
template.

What you should be doing is something like:

     logging.info('cpu_util_pct_pre is %s, free_mem_gb_pre is %s', 
cpu_util_pct_pre, free_mem_gb_pre)




More information about the Python-list mailing list