我尝试通过exec()函数在Python3中运行脚本。
我正在使用“学习Python”一书学习Python,O'Reilly第五版。在“第2章 Python如何运行程序“有一种方法可以这样:
>>> exec(open('script1.py').read())
这是我的文件script1.py
# A first script in python.
import sys
print(sys.platform)
print(2 **100)
x = 'Spam!'
print(x * 8)
input()
预期输出为:
win32
1267650600228229401496703205376
Spam!Spam!Spam!Spam!Spam!Spam!Spam!Spam!
在作品中我只能使用WinXP: - (
但是Python3中的实际输出是:
>>> exec(open('script1.py').read())
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 1
# A first script in python.
^
SyntaxError: invalid character in identifier
>>>
Python2中的输出是:
>>> exec(open('script1.py').read())
win32
1267650600228229401496703205376
Spam!Spam!Spam!Spam!Spam!Spam!Spam!Spam!
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 7, in <module>
File "<string>", line 0
^
SyntaxError: unexpected EOF while parsing
>>>
我不明白为什么这不像书那样有效。
答案 0 :(得分:2)
问题在于您的编辑器,它在文件的开头添加了一个“错误的符号”(实际上,符号本身是正确的)。请检查一下。
如果你想检查这个猜想,请
print open('script1.py').read(1)
在python repl。
文件中可能是BOM(感谢@devnull)。
如果是这样,您可以使用encondig utf-8-sig
:
open('script1.py', encoding='utf-8-sig')
更多信息,请点击此处阅读:
什么是BOM(字节顺序标记),您可以在这里找到:
当然,您必须在将来避免脚本中的BOM。 请检查编辑器的设置, 并确保在保存脚本时不会创建BOM。