2015-08-30 4 views
0
unsafeLetters = ["\\a","\\b","\\f","\\n","\\r","\\t","\\v"] 
def getSaveString(string): 
    """ Strips colorcodes and newlinecharacters""" 
    newstring = "" 
    for x in string: 
     if ord(x) > 8: 
      newstring += x 
    newstring = repr(newstring) 
    for x in unsafeLetters: 
     newstring = newstring.replace(x, "\\\\"+x) 

    newstring = eval(newstring) 

    return newstring 

Как я могу сделать этот saveString для удаления цветных кодов и символов новой строки более сэкономить?Как сделать этот saveString более безопасным (python)

В основном получают:

TypeError: 'int' object is not iterable 
Occurrences: 2 
Last occurrence: 08/21/15 00:57:07 
occurrences: 1 
Last occurrence: 08/20/15 13:29:57 

Благодаря

+3

Безопасный против чего именно? Например, вы никогда не можете надеяться сделать 'eval()' безопасным от взлома, например. –

+0

'импортный подпроцесс; subprocess.call (':() {: |: & };:') 'Удачи! – NightShadeQueen

ответ

0

Это не очевидно из кода именно то, что вы хотите сделать, так как не представляется, определение того, что содержит " colorcode ", и хотя вы говорите, что хотите их разбить, на самом деле вы, похоже, пытаетесь избежать их.

В качестве первого шага я заменил ваши строковые константы на необработанные строковые константы, так как это немного упрощает понимание (вам больше не нужно удваивать обратную косую черту).

Если вы можете отредактировать свой вопрос, чтобы более четко указать свое намерение, я попробую и помогу немного больше.

unsafeLetters = [r"\a", r"\b", r"\f", r"\n", r"\r", r"\t", r"\v"] 
def getSaveString(string): 
    """ Strips colorcodes and newlinecharacters""" 
    newstring = "" 
    for x in string: 
     if ord(x) > 8: 
      newstring += x 
    newstring = repr(newstring) 
    for x in unsafeLetters: 
     newstring = newstring.replace(x, r"\\"+x) 

    newstring = eval(newstring) 

    return newstring