Дэви,
Как вы говорите, что вы можете просто оставить кавычки от вашей строки.
Для проекта, над которым я работаю, я хотел быть в состоянии представить почти любой строковый литерал Python в качестве значения для некоторых моих параметров конфигурации и более того, что я хотел бы обрабатывать некоторые из них как необработанные строковые литералы. (Я хочу, чтобы этот конфиг мог обрабатывать такие вещи, как \ n, \ x1b и т. Д.).
В этом случае я использовал что-то вроде:
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
... который я думаю, будет обрабатывать все, что не содержит как тройные одинарные и тройной двойные кавычки строки.
(Этот один угловой корпус отличается от моих требований).
Справедливость этого кода здесь на SO; Ярлык синтаксиса, похоже, путается тем фактом, что моя docstring - это строка raw. Это было необходимо, чтобы сделать доктрину счастливой для этой конкретной функции).
Обратите внимание на последнее предложение должно быть обновлено. 'strip()' ДЕЙСТВИТЕЛЬНО модифицирует строку, если она начинается OR, заканчивается указанной строкой. например ''" bar..strip ("'") 'возвращает' 'bar', а не 'bar'. – Jonny