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

Jat*_*ana -3 python

Python是一种解释型语言,所以它在我运行时逐行执行代码

import csv,re,sys

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

filename= #from command line argument
Run Code Online (Sandbox Code Playgroud)

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

现在我的问题是代码的最后一行有错误,但Python解释器逐行执行代码行这样的代码到最后一行是正确的,所以应该高达最后一行执行代码,但它给我下面的错误和不打印我在第2行中定义的sys.argv的长度

File "trace-analysis.py", line 45
filename = # from command line argument
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)

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

Bak*_*riu 7

python解释器逐行执行代码

这是假的 !!!

Python读取整个文件,编译为字节码,然后执行字节码.如果文件中的任何地方都存在语法错误,则不会运行指令,因为解释器将首先尝试解析文件的全部内容并意识到它不是格式良好的程序.

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
Run Code Online (Sandbox Code Playgroud)

我的地方是意大利语.该错误只是一个标准错误消息,表示它发现了意外的EOF.

因此,bash 在开始执行之前不会解析整个文件.Quod est demostrandum

  • @Bakuriu,“Python 不是 bash”作为对 Python 以严格逐行方式解析和执行代码的说法的反驳,对我来说是 bash 逐行执行代码的明确暗示。这很接近,但并不是完全正确。 (2认同)
  • 回复:最近的编辑——顺便说一句,我从未声称 bash _did_ 在运行它之前将整个文件解析为代码。如果确实如此,那么相当多的工具(例如共享档案)将毫无用处。 (2认同)