Davey,
Comme vous le dites, vous pouvez simplement laisser les citations de votre chaîne.
Pour un projet sur lequel je travaille, je voulais pouvoir représenter presque tout littéral de chaîne Python comme une valeur pour certaines de mes options de configuration et plus au point que je voulais être capable de gérer certaines d'entre elles comme premières littéraux de chaîne. (Je veux que cette config soit capable de gérer des choses comme \ n, \ x1b, et ainsi de suite).
Dans ce cas, j'utilisé quelque chose comme:
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
... qui, je pense gérer tout ce qui ne contient pas les deux chaînes entre guillemets triples simples et triples-doubles.
(Ce cas de coin est bien au-delà de mes exigences).
Il y a une bizarrerie de ce code ici sur SO; le surligneur de syntaxe semble être confondu par le fait que ma docstring est une chaîne brute. C'était nécessaire pour rendre doctest heureux pour cette fonction particulière).
Notez la dernière phrase devrait être mis à jour. 'strip()' DOES modifie la chaîne si elle commence OU finit avec la chaîne spécifiée. par exemple. '' "bar'.strip (" '")' renvoie '' bar'' et non 'bar'. – Jonny