Ich weiß, dass Semikolons in Python nicht erforderlich sind, aber sie können verwendet werden, um mehrere Anweisungen in eine einzelne Zeile zu packen, z
>>> x = 42; y = 54
Ich habe immer gedacht, dass ein Semikolon einem Zeilenumbruch entspricht. Daher war ich etwas überrascht zu erfahren (h / t Ned Batchelder auf Twitter ), dass ein doppeltes Semikolon ein SyntaxError ist:
>>> x = 42
>>> x = 42;
>>> x = 42;;
File "<stdin>", line 1
x = 42;;
^
SyntaxError: invalid syntax
Ich nahm an, dass das letzte Programm gleichwertig war x = 42\n\n
. Ich hätte gedacht, dass die Aussage zwischen den Semikolons als leere Zeile behandelt wird, als No-Op. Scheinbar nicht.
Warum ist das ein Fehler?
python
syntax-error
language-lawyer
alexwlchan
quelle
quelle
if condition:;
wären solche Dinge auch legal, aber nicht.print [1, 2,, 3]
zu arbeiten? Es ist so ziemlich das Gleiche.Antworten:
Aus der Python-Grammatik können wir erkennen, dass dies
;
nicht definiert ist als\n
. Der Parser erwartet nach a eine weitere Anweisung;
, es sei denn, danach steht ein Zeilenumbruch:Semicolon w/ statement Maybe a semicolon Newline \/ \/ \/ \/ simple_stmt: small_stmt (';' small_stmt)* [';'] NEWLINE
Deshalb
x=42;;
funktioniert es nicht. weil es keine Aussage zwischen den beiden Semikolons gibt, da "nichts" keine Aussage ist. Wenn es eine vollständige Aussage zwischen ihnen gäbe, wie einepass
oder auch nur eine0
, würde der Code funktionieren.x = 42;0; # Fine x = 42;pass; # Fine x = 42;; # Syntax error if x == 42:; print("Yes") # Syntax error - "if x == 42:" isn't a complete statement
quelle
Eine leere Anweisung wird weiterhin benötigt
pass
, auch wenn Sie ein Semikolon haben.>>> x = 42;pass; >>> x 42
quelle