控制台中的Python错误但不包含在文件中:行继续符后面的意外字符

时间:2016-09-07 14:16:55

标签: python console

我有一个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 -*-,我也将其粘贴到控制台中。

1 个答案:

答案 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"]*' 。)