This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Title: InterpolationSyntaxError reading the (windows) environment with unresolved environment variables
Type: behavior Stage: resolved
Components: Library (Lib) Versions: Python 3.8
Status: closed Resolution: not a bug
Dependencies: Superseder:
Assigned To: Nosy List: c_panser, paul.moore, ronaldoussoren, steve.dower, tim.golden, zach.ware
Priority: normal Keywords:

Created on 2020-08-07 11:10 by c_panser, last changed 2022-04-11 14:59 by admin. This issue is now closed.

File name Uploaded Description Edit c_panser, 2020-08-07 11:10 testfilecontaining bug and workaround
Messages (5)
msg374991 - (view) Author: Pauser (c_panser) Date: 2020-08-07 11:10
I tried to extend our config processing using the environment variables and the configparser module. 

On some machines (all windows) the configparser failed with an InterpolationSyntaxError ...
It seems that not resolved environment variables (e.g. "test":"%not_existing%") lead to this error.
I wrote little python test file reproducing the error and providing a very simple workaround to not fix all environments ;) Attention the bug is reproduced but the test is green ^^

I would be happy to remove the workaround as soon as possible ;)
msg374992 - (view) Author: Ronald Oussoren (ronaldoussoren) * (Python committer) Date: 2020-08-07 11:26
The exception is due to the interpolation feature of ConfigParser, which expects a different syntax. The default interpolation syntax is "%(key)s".

Interpolation can be turned off by passing "interpolation=None" when creating the ConfigParser object.

See also
msg374994 - (view) Author: Pauser (c_panser) Date: 2020-08-07 11:46
So I have to use two config parser objects to merge the configuration of one config.ini (needs interpolation) and the environment on windows ?

So at the end choose wether to use environment variables or config parser interpolation, right? (only on windows) 

Not the solution I was looking for.
msg375000 - (view) Author: Ronald Oussoren (ronaldoussoren) * (Python committer) Date: 2020-08-07 15:08
There's multiple options:

1. Escape '%' in environment variables (%%not_existing%%) to avoid the exception

2. Switch to configparser.ExtendedInterpolation for the interpolation, which uses a different syntax that doesn't conflict with env. variables on Windows (but does conflict with that on Unix)

Note that regardless of the option ConfigParser will not expand the value of the environment variable reference. If you want to be able to interpolate env variables you need a different solution, for example by using the 'defaults' argument to ConfigParser and expand references using the ConfigParser interpolation syntax.
msg375098 - (view) Author: Pauser (c_panser) Date: 2020-08-10 06:25
Thanks a lot for the fast response ... did not expect this ;)
I have looked into many threads and I will try to implement my own interpolation to use the current basic interpolation and process the current environment.

So thanks a lot, stay healthy and have a nice day!
Date User Action Args
2022-04-11 14:59:34adminsetgithub: 85672
2020-08-10 06:25:20c_pansersetmessages: + msg375098
2020-08-07 15:08:08ronaldoussorensetmessages: + msg375000
2020-08-07 11:46:00c_pansersetmessages: + msg374994
2020-08-07 11:26:10ronaldoussorensetstatus: open -> closed

nosy: + ronaldoussoren
messages: + msg374992

resolution: not a bug
stage: resolved
2020-08-07 11:10:23c_pansercreate