On Tue, Feb 17, 2009 at 2:01 PM, Scott David Daniels wrote: >>> Mirko Dziadzka schrieb: >>>> >>>> I'm trying to find a way to output strings in the raw-string format, >>>> e.g. >>>> print_as_raw_string(r"\.") should output r"\." instead of "\\." ... > > ... > The big issue I see is that lots of values cannot be represented > as raw strings. Your code checks for a final '\', but many "control" > characters and the quote marks are also at issue. > > raw_repr('["\']a\x13\xfebc\\de') should contain several nasty cases.
It seems to me that a raw_repr should only be required to be able to encode strings that are representable as raw strings in the first place. Here's mine: def raw_repr(s): if s and s[-1] == '\\': raise ValueError('No raw string representation; ' 'string ends in backslash') # If you want to test for control and non-ASCII characters to raise # an exception, that's up to you quote = None if '\n' not in s: if "'" not in s: quote = "'" elif '"' not in s: quote = '"' if not quote: if "'''" not in s: quote = "'''" elif '"""' not in s: quote = '"""' if not quote: raise ValueError('No raw string representation; ' 'string contains unescapable quote characters') return 'r' + quote + s + quote >>> print raw_repr(r"1\2'3\n") r"1\2'3\n" >>> print raw_repr(r'''"What's up," he said.''') r'''"What's up," he said.''' >>> # valid raw string, left as an exercise for the reader: ... print raw_repr(r'"""'"'''") # ;) Traceback (most recent call last): File "<stdin>", line 2, in ? File "<stdin>", line 19, in raw_repr ValueError: No raw string representation; string contains unescapable quote characters -Miles -- http://mail.python.org/mailman/listinfo/python-list