[Python-ideas] Multi-line strings that respect indentation

Raymond Hettinger raymond.hettinger at gmail.com
Fri Nov 5 02:18:29 CET 2010


On Nov 4, 2010, at 5:21 PM, Daniel da Silva wrote:

> 
> On several occasions I have run into code that will do something like the following with a multiline string:
> 
> 
> def some_func():
>     x, y = process_something()
> 
>     val = """
> <xml>
>   <myThing>
>     <val>%s</val>
>     <otherVal>%s</otherVal>
>   </myThing>
> </xml>
> """ % (x, y)
> 
>     return val
> 
> To me, this is rather ugly because it messes up the indentation of some_func(). Suppose we could have a multiline string, that when started on a line indented four spaces, ignores the first four spaces on each line of the literal when creating the actual string?
> 
> In this example, I will use four quotes to start such a string. I think the syntax for this could vary though. It would be something like this:
> 
> def some_func():
>     x, y = process_something()
>     
>     val = """"
>     <xml>
>       <myThing>
>         <val>%s</val>
>         <otherVal>%s</otherVal>
>       </myThing>
>     </xml>
>     """" % (x, y)
> 
>     return val
> 
> That way, the indentation in the function would be preserved, making everything easy to scan, and the indentation in the output would not suffer.


Why not use textwrap.dedent() to remove the common, leading whitespace:

      return dedent(val)


Raymond
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20101104/5d6a2b98/attachment.html>


More information about the Python-ideas mailing list