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

问题描述:

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

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

我没有得到这个行为.... 请有人解释这sys.argv中的未印刷长度...

+0

为什么给出负面的观点? – 2014-10-09 18:51:40

+3

仅仅因为代码**被**执行**逐行并不意味着它被**解析**逐行。 – 2014-10-09 18:51:42

+0

您的谓词不正确。 – 2014-10-09 18:51:54

蟒蛇口译员按行

0123执行代码

这是

的Python读取整个文件,编译它字节码,然后执行字节码。 如果没有指令运行,因为该解释器将首先尝试解析文件的全部内容,并意识到这不是一个结构良好的程序中的语法错误任何地方文件英寸

Python不是bash。


就OT清楚我的意思与上次声明:

$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确实不是在开始执行之前解析整个文件。 发表评论

+0

bash实际上并不严格逐行解析和执行。 – 2014-10-09 18:52:34

+0

显然是错误的:它是解析器中的前瞻,它负责了最近一个更有趣的安全漏洞。 – 2014-10-09 18:54:55

+0

@MarkReed这是我的观点。编写一个以'echo“Hello,World”开始的脚本,然后包含垃圾和bash将愉快地输出'Hello,World'。 Python不。 – Bakuriu 2014-10-09 18:55:05