[Python-ideas] Dart like multi line strings identation

Terry Reedy tjreedy at udel.edu
Sat Mar 31 15:47:13 EDT 2018


On 3/31/2018 2:14 PM, Marius Räsener wrote:
> Oh, ok... yeah didn‘t think of that.
> Except I guess I‘d assume that so far multiline strings are either with 
> textwrap or ‚don‘t care‘? Maybe?

For docstrings, I don't care, as a docstring consumer like help() can 
reformat the docstring with indents and dedents.  For instance

 >>> def f():
	def g():
		"""returnx

		more doc
		"""
	print( g.__doc__)
	help(g)

	
 >>> f()
returnx

		more doc
		
Help on function g in module __main__:

g()
     returnx

     more doc


For other situations, parse-time string concatenation often suffices, as 
I showed in my response to the original post.  This example from 
idlelib.config shows the increased flexibility it allows.  It has 1-line 
padding above and 1-space padding to the left to look better when 
displayed in a popup box.

             warning = ('\n Warning: config.py - IdleConf.GetOption -\n'
                        ' problem retrieving configuration option %r\n'
                        ' from section %r.\n'
                        ' returning default value: %r' %
                        (option, section, default))

With no padding, I would not argue with someone who prefers 
textwrap.dedent, but dedent cannot add the leading space.


For literals with really long lines, where the physical indent would 
push line lengths over 80, I remove physical indents.

class TestClass(unittest.TestCase): \
     test_outputter(self):
         expected = '''\
First line of a really, really, ............................, long line.
Short line.
Summary line that utilizes most of the room alloted, with no waste.
'''
         self.assertEqual(outputter('test'), expected)


-- 
Terry Jan Reedy




More information about the Python-ideas mailing list