Also note that the semicolon binds tighter than the colon in this context, so that in the following example, either all or none of the print statements are executed: Summarizing: compound_stmt ::= if_stmt | while_stmt | for_stmt | try_stmt | with_stmt | funcdef | classdef | decorated suite ::= stmt_list NEWLINE | NEWLINE INDENT statement+ DEDENT statement ::= stmt_list NEWLINE | compound_stmt stmt