いくつかの設定ファイルの素早くハックな構文解析を行うスクリプトを(少し)改善しようとしています。文字列リテラルを含む文字列を、それが表す文字列に簡単に変換できますか?
ファイルから読み取った「項目」を認識すると、単純なpython値に変換する必要があります。値は数値または文字列です。それは実際には数ではなかった場合、私はちょうどint
またはfloat
を使用してValueError
をキャッチすることができますPythonの番号にファイルから読み込んだ文字列を変換するには
。 Pythonの文字列に似たものがありますか?すなわち
s1 = 'Goodbye World. :('
s2 = repr(s1)
s3 = ' "not a string literal" '
s4 = s3.strip()
v1 = parse_string_literal(s1) # throws ValueError
v2 = parse_string_literal(s2) # returns 'Goodby World. :('
v3 = parse_string_literal(s3) # throws ValueError
v4 = parse_string_literal(s4) # returns 'not a string literal'
ファイルでは、文字列値はPython文字列リテラルと非常によく似ています。 'または'で引用することができ、バックスラッシュのエスケープなどが含まれている可能性があります。正規表現を使用して独自のパーサをロールすることはできますが、すでに存在するものがあれば、ホイールを再発明しません。
もちろんeval
を使用しますが、それは常にやや危険だ。
ああ、 1つの笑い声。文字列がリテラル式として解析できない場合は、少なくとも 'SyntaxError'と' IndentationError'と 'ValueError'を投げることができます。それがあれば誰でも知っていますか、それとももっと可能性のある例外がありますか? – Ben