我尝试通过exec()函数在Python3中运行脚本。
我正在用O'Reilly第5版的“学习Python”这本书来学习Python。在“第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
>>>
我不明白为什么这不像书中所说的那样起作用。
问题出在您的编辑器中,该编辑器在文件的开头添加了“不正确的符号”(实际上,该符号本身是正确的)。请检查一下。
如果您想检查这个猜想,请执行
print open('script1.py').read(1)
在python repl中。
它可能是文件中的BOM(感谢@devnull)。
如果是这样,您可以使用encondig打开文件utf-8-sig
:
open('script1.py', encoding='utf-8-sig')
有关更多信息,您可以在这里阅读:
什么是BOM(字节顺序标记),您可以在此处找到:
当然,将来您必须避免在脚本中使用BOM。请检查编辑器的设置,并确保在保存脚本时不会创建BOM。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句