为什么控制台报语法错误,但脚本运行时没有?

0 投票
1 回答
856 浏览
提问于 2025-04-17 14:35

这是关于Python 2.7.3的内容。

从控制台运行的代码:

>>> try:
...     fsock = open("something_that_does_not_exist")
... except IOError:
...     print "The file does not exist"
... print "Let's keep going"
Traceback (  File "<interactive input>", line 5
    print "Let's keep going"
        ^
SyntaxError: invalid syntax

如果我把相同的代码保存到一个脚本里:

ex.py

def try1():
    try:
        fsock = open("something_that_does_not_exist")
    except IOError:
        print "The file does not exist"
    print "Let's keep going"

然后运行它:

>>> import ex
>>> ex.try1()
The file does not exist
Let's keep going
>>> 

我在控制台、IDLE和PythonWin上都试过,结果都是一样的。

那有什么区别呢?

补充说明:

我正在学习Python,参考的资料包括《Dive into Python》(http://www.diveintopython.net/)。在第6.1个例子中,作者展示了如何从命令行运行这个例子:http://www.diveintopython.net/file_handling/index.html

所以我觉得这个应该可以正常工作。

1 个回答

2

你需要完成 try except 这个代码块。如果你在中间加一行代码,解释器不会出错。原因是它会把打印语句当作 try 里面的一部分,虽然实际上并不是。所以如果你先完成 except 的部分,让它运行,然后再粘贴下一条打印语句,这样就能正常工作了。

>>> try:
...     fsock = open("something_that_does_not_exist")
... except IOError:
...     print "The file does not exist"
...
<output is here>

然后在这里加上这条语句:

>>> print "Let's keep going"

在 Python 解释器中粘贴代码并不总是能成功,原因有很多,跟这个情况类似。解释器主要是用来测试一些随机的代码片段,你不能指望粘贴大块的函数时总是能正常运行。

如你所见,这其实是同样的事情:

>>> try:
...     print 'hi'
... except:
...     print 'yo'
... print 'hi'
  File "<stdin>", line 5
    print 'hi'
        ^
SyntaxError: invalid syntax
>>> 

撰写回答