An idiom for code generation with exec
Peter Otten
__peter__ at web.de
Sat Jun 21 02:52:57 EDT 2008
eliben wrote:
> On Jun 20, 2:44 pm, Peter Otten <__pete... at web.de> wrote:
>> eliben wrote:
>> > Additionally, I've found indentation to be a problem in such
>> > constructs. Is there a workable way to indent the code at the level of
>> > build_func, and not on column 0 ?
>>
>> exec"if 1:" + code.rstrip()
>>
>> Peter
>
> Why is the 'if' needed here ? I had .strip work for me:
A simple .strip() doesn't work if the code comprises multiple lines:
>>> def f():
... return """
... x = 42
... if x > 0:
... print x
... """
...
>>> exec "if 1:\n" + f().rstrip()
42
>>> exec f().strip()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 2
if x > 0:
^
IndentationError: unexpected indent
You can of course split the code into lines, calculate the indentation of
the first non-white line, remove that indentation from all lines and then
rejoin.
Peter
More information about the Python-list
mailing list