mirror of
https://github.com/RustPython/RustPython.git
synced 2026-10-28 18:59:04 +08:00
Require at least finally or except on a try statement.
This commit is contained in:
1 parent
3ed71308bf
commit
19112cef49
2 files changed
+29
-13
No files matched your search
@@ -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,
|
||||
},
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
@@ -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
|
||||
""")
|
||||
Reference in new issue
Block a user