Davey,
Como usted dice que sólo puede salir de las cotizaciones fuera de su cadena.
Para un proyecto en el que estoy trabajando Quería poder representar casi cualquier literal de cadena de Python como valor para algunas de mis opciones de configuración y más al punto que quería poder manejar algunas de ellas como raw literales de cadena. (Quiero que esa configuración sea capaz de manejar cosas como \ n, \ x1b, etc.).
En ese caso he usado algo como:
def EvalStr(s, raw=False):
r'''Attempt to evaluate a value as a Python string literal or
return s unchanged.
Attempts are made to wrap the value in one, then the
form of triple quote. If the target contains both forms
of triple quote, we'll just punt and return the original
argument unmodified.
Examples: (But note that this docstring is raw!)
>>> EvalStr(r'this\t is a test\n and only a \x5c test')
'this\t is a test\n and only a \\ test'
>>> EvalStr(r'this\t is a test\n and only a \x5c test', 'raw')
'this\\t is a test\\n and only a \\x5c test'
'''
results = s ## Default returns s unchanged
if raw:
tmplate1 = 'r"""%s"""'
tmplate2 = "r'''%s'''"
else:
tmplate1 = '"""%s"""'
tmplate2 = "'''%s'''"
try:
results = eval(tmplate1 % s)
except SyntaxError:
try:
results = eval(tmplate2 %s)
except SyntaxError:
pass
return results
... que creo que va a manejar cualquier cosa que no contiene ambas cadenas de triples y triples-dobles comillas.
(Esa funda de esquina es mucho más allá de mis requisitos).
Hay una rareza de este código aquí en SO; el resaltador de sintaxis parece confundirse por , el hecho de que mi docstring es una cadena sin formato. Eso fue necesario para hacer feliz a esta función particular).
Nota la última frase debe ser actualizada. 'strip()' SES modifica la cadena si comienza O termina con la cadena especificada. p.ej. ''" bar'.strip ("'") 'devuelve''bar' y no 'bar'. – Jonny