为什么Python在达到执行点之前报告语法错误?

时间:2014-10-09 18:50:02

标签: python

Python是一种解释型语言,因此它逐行执行代码,因此当我运行时

import csv,re,sys

print len(sys.argv)
if(len(sys.argv)!=2):
    sys.exit(0)

filename= #from command line argument

它甚至不会执行一行并给出语法错误。

现在我的问题是代码的最后一行有错误,但python解释器逐行执行代码,所以直到最后一行的代码是正确的所以它应该执行代码到最后一行,但它给了我低于错误,而不是我在第2行中定义的sys.argv的打印长度

File "trace-analysis.py", line 45
filename = # from command line argument
SyntaxError: invalid syntax

我没有得到这种行为...... 请有人解释一下......

1 个答案:

答案 0 :(得分:7)

  

python interpreter逐行执行代码

这是 false !!!

Python读取整个文件,编译为字节码,然后执行字节码。 如果文件中没有 where 语法错误,则运行指令,因为解释器将首先尝试解析文件的全部内容,意识到这不是一个结构良好的计划。

Python不是bash。


不清楚我对最后一句话的意思:

$echo 'print("Hello, World!")
> $(
> ' > test.py
$python test.py   # NOTE: no Hello, World in the output
  File "test.py", line 2
    $(
    ^
SyntaxError: invalid syntax
$echo 'echo "Hello, World!"
$(
' > test.sh
$bash test.sh    # NOTE: there's a Hello, World => bash execute the first statement!
Hello, World!
test.sh: riga 2: EOF non atteso durante la ricerca di ")"
test.sh: riga 4: errore di sintassi: EOF non atteso

我的语言环境是意大利语。该错误只是一个标准错误消息,表示它发现了意外的EOF。

因此bash在开始执行之前解析整个文件。 Quod est demostrandum