如何修复由卷曲引号引起的Python "SyntaxError: invalid character"?

446 阅读1分钟

这里有一个看起来很单纯的Python文件。

print(“x”)

不幸的是,如果我们运行它,就会得到这个错误信息。

$ python example.py
  File "/Users/chainz/tmp/hints/q.py", line 1
    print(“x”)
          ^
SyntaxError: invalid character '“' (U+201C)

问题是代码中使用了卷曲的引号字符 (“”''),但 Python 只支持引号字符 (""'')。很可能代码是用一个自动将直引号转换为卷曲的程序编辑的,比如 Microsoft Word。

(在维基百科上可以看到更多关于卷曲引号和直引号的信息)。

要修复这样的代码,你需要把卷曲的引号转换回它们的直引号。 你可能可以用编辑器中的查找和替换功能来做到这一点。 或者,你可以用 Python 来进行替换。

filename = "example.py"
text = open(filename).read()
text = text.replace("“", '"').replace("”", '"').replace("‘", "'").replace("’", "'")
open(filename, "w").write(text)

你可以把这段代码保存在一个新的文件中 (例如:fixer.py),把filename 改为你的破损文件的名字,然后运行python fixer.py

其他错误

也有可能遇到由使用大括号引起的不同的错误信息。 如果你有一个开头的直引号,但有一个结尾的大括号,错误将是。

$ python example.py
  File "/.../example.py", line 1
    print("x”)
          ^
SyntaxError: unterminated string literal (detected at line 1)

如果你使用单曲引号,错误显示这些是有问题的字符。

$ python example.py
  File "/Users/chainz/tmp/hints/example.py", line 1
    print(‘x’)
          ^
SyntaxError: invalid character '‘' (U+2018)