我有一个Python脚本,它有一个用这个方法定义的类:
@staticmethod
def _sanitized_test_name(orig_name):
return re.sub(r'[`‘’\"]*', '', re.sub(r'[\r\n\/\:\?\<\>\|\*\%]*', '', orig_name.encode('utf-8')))
我能够从命令提示符运行脚本,没有任何问题。但是当我在控制台中粘贴完整类的代码时,我得到了SyntaxError: unexpected character after line continuation character
:
>>> return re.sub(r'[`‘’\"]*', '', re.sub(r'[\r\n\/\:\?\<\>\|\*\%]*', '', orig_name.encode('utf-8')))
File "<stdin>", line 1
return re.sub(r'[``'\"]*', '', re.sub(r'[\r\n\/\:\?\<\>\|\*\%]*', '', orig_name.encode('utf-8')))
^
SyntaxError: unexpected character after line continuation character
如果我在粘贴时跳过该方法,则可行。请注意,我的原始行与错误显示的内容有所不同:r'[`‘’\"]*'
vs r'[``'"]*'
。用ur'[`‘’"]*'
替换SyntaxError: EOL while scanning string literal
。
似乎Python控制台看到‘
作为风格化`
(反引号)而’
作为sytlised '
(单引号)。我的意思是unicode open and close quotes。我的脚本顶部有# -*- coding: utf-8 -*-
,我也将其粘贴到控制台中。
答案 0 :(得分:1)
只关注导致错误的表达式r'[`‘’"]*'
...
>>> r'[`‘’"]*'
File "<stdin>", line 1
r'[``'"]*'
^
SyntaxError: EOL while scanning string literal
>>> ur'[`‘’"]*' # with the unicode modifier
File "<stdin>", line 1
ur'[``'"]*'
^
SyntaxError: EOL while scanning string literal
如果我所在的终端不接受unicode输入,则unicode的解释从‘
转换为`
和’
转换为{{1}发生。
因此,解决方法是将正则表达式和使用unichr()
与两个引号2018和2019的相应代码分开:
'
(这个特殊的正则表达式可能不需要原始字符串修饰符>>> r'[`' + unichr(2018) + unichr(2019) + r'"]*'
u'[`\u07e2\u07e3"]*'
。)