有没有办法在python中声明一个字符串变量,以便它内部的所有内容都自动转义,或者有它的文字字符值?
我不是要问如何用斜线来逃避引号,这是显而易见的.我要求的是一个通用的方法,使字符串文字中的所有内容,以便我不必手动完成并转义非常大的字符串的所有内容.有人知道解决方案吗?谢谢!
似乎某些转义字符在docstring中仍然很重要.例如,如果我们运行python foo.py(Python 2.7.10),它将发出错误,如ValueError: invalid \x escape.
def f():
"""
do not deal with '\x0'
"""
pass
Run Code Online (Sandbox Code Playgroud)
实际上,似乎正确的docsting应该是:
"""
do not deal with '\\\\x0'
"""
Run Code Online (Sandbox Code Playgroud)
另外它也会影响import.
对于Python 3.4.3+,错误消息是:
File "foo.py", line 4
"""
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 24-25: truncated \xXX escape
Run Code Online (Sandbox Code Playgroud)
我觉得有点奇怪,因为我认为它只会对__doc__模块本身产生影响并且没有任何副作用.
为什么设计如此?它是Python中的缺陷/错误吗?
我知道"""和原始文字的含义,但我认为python解释器应该能够特别处理docstring,至少在理论上.
我需要一种方法让我的函数在运行时接收一个字符串并删除反斜杠,同时保留它前面的字符。所以对于 \a 我必须得到一个。这也必须适用于像 \e -> e 这样的非转义字符。
我已经在互联网上寻找解决此问题的一般解决方案,但似乎没有。我发现的最佳解决方案是使用字典从头开始构建字符串,例如:如何防止 Python 中的特殊字符自动转义
escape_dict={'\a':r'\a',
'\b':r'\b',
'\c':r'\c',
'\f':r'\f',
'\n':r'\n',
'\r':r'\r',
'\t':r'\t',
'\v':r'\v',
'\'':r'\'',
'\"':r'\"',
'\0':r'\0',
'\1':r'\1',
'\2':r'\2',
'\3':r'\3',
'\4':r'\4',
'\5':r'\5',
'\6':r'\6',
'\7':r'\7',
'\8':r'\8',
'\9':r'\9'}
def raw(text):
"""Returns a raw string representation of the string"""
new_string=''
for char in text:
try:
new_string += escape_dict[char]
except KeyError:
new_string += char
return new_string
Run Code Online (Sandbox Code Playgroud)
然而,由于转义数字和转义字母之间的冲突,这通常会失败。使用像 \001 而不是 \1 这样的 3 位数字也会失败,因为输出中会有额外的数字,这违背了目的。我应该简单地删除反斜杠。其他基于编码的建议解决方案,例如在 Python 中处理字符串中的转义序列
也不起作用,因为这只是将转义字符转换为十六进制代码。\a 被转换为 \x07。即使以某种方式删除它,字符 a 仍然丢失。
是否有Python的组件允许我绕过中间引号?在中,您是否可以指定主启动和停止打印调用,以便解释主启动和停止之间的所有内容,无论该元素最初代表什么?
我试图在程序中打印这行有趣的ASCII,这只是由于中间引号弹出而导致错误的行之一:
print" ./'..|'.|| |||||\``````` " '''''''/||||| ||.`|..`\."
^
SyntaxError: EOL while scanning string literal
Run Code Online (Sandbox Code Playgroud)
编辑:在考虑字符串文字的原始解释时,如果三重引号出现在您的行中,您还可以在原始解释中遇到三重引用的退出.