Require at least finally or except on a try statement.

This commit is contained in:
Windel Bouwman committed 2019-08-19 09:00:08 +02:00
1 parent 3ed71308bf
commit 19112cef49
2 files changed
+29 -13

No files matched your search

+15 -8
View File
@@ -365,8 +365,8 @@ ForStatement: ast::Statement = {
};
TryStatement: ast::Statement = {
<location:@L> "try" ":" <body:Suite> <handlers:ExceptionHandlers?> <finally:("finally" ":" Suite)?> => {
let (handlers, orelse) = handlers.unwrap_or_default();
<location:@L> "try" ":" <body:Suite> <handlers:ExceptClause+> <else_suite:("else" ":" Suite)?> <finally:("finally" ":" Suite)?> => {
let orelse = else_suite.map(|s| s.2);
let finalbody = finally.map(|s| s.2);
ast::Statement {
location,
@@ -378,12 +378,19 @@ TryStatement: ast::Statement = {
},
}
},
};
ExceptionHandlers: (Vec<ast::ExceptHandler>, Option<ast::Suite>) = {
<handlers:ExceptClause+> <else_suite:("else" ":" Suite)?> => {
let orelse = else_suite.map(|s| s.2);
(handlers, orelse)
<location:@L> "try" ":" <body:Suite> <finally:("finally" ":" Suite)> => {
let handlers = vec![];
let orelse = None;
let finalbody = Some(finally.2);
ast::Statement {
location,
node: ast::StatementType::Try {
body,
handlers,
orelse,
finalbody,
},
}
},
};
+14 -5
View File
@@ -240,10 +240,19 @@ except NameError as ex2:
pass
# the else clause requires at least one except clause:
with assertRaises(SyntaxError):
exec("""if True:
try:
pass
else:
pass
exec("""
try:
pass
else:
pass
""")
# Try requires at least except or finally (or both)
with assertRaises(SyntaxError):
exec("""
try:
pass
""")