使用'exec'函数在解释器Shell中运行脚本

时间:2014-01-20 14:47:52

标签: python file exec

我尝试通过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
>>>

我不明白为什么这不像书那样有效。

1 个答案:

答案 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。