It is not possible to use '%' character in config options in combination with $() substitution. Example: Given this configuration file: [DEFAULT] option1=xxx option2=%(option1)s/xxx ok=%(option1)s/%%s not_ok=%(option2)s/%%s config.get('DEFAULT', 'ok') returns xxx/%s but config.get('DEFAULT', 'not_ok') fails with an exception because the '%' needs to be escaped multiple times depending on the evaluation depth: %(option2)s/%%s -> %(option1)s/xxx/%s -> exception what I would like it to do is: %(option2)s/%%s -> %(option1)s/xxx/%%s -> xxx/xxx/%s Attached to this bug report is a simple patch to work around this limitation (not very elegant, but it works)
Logged In: YES user_id=3066 I'm afraid getting this "right" is going to be much more tedious that the proposed patch. It's unclear to me at the moment whether this should be a documented limitation or if we should really fix it. The ConfigParser module is generally in bad shape, unfortunately. ;-(
Logged In: YES user_id=3066 I've added the SafeConfigParser class for Python 2.3. This version implements a safer (and more predictable) interpolation. This can't replace the original ConfigParser since the behavior is different, but should be preferred for new applications.