diff --git a/hy/compiler.py b/hy/compiler.py index cf0de49..ca4be73 100644 --- a/hy/compiler.py +++ b/hy/compiler.py @@ -176,7 +176,6 @@ class HyASTCompiler(object): tback=None) @builds("try") - @checkargs(min=1) def compile_try_expression(self, expr): expr.pop(0) # try @@ -186,10 +185,16 @@ class HyASTCompiler(object): else: Try = ast.TryExcept + if len(expr) == 0: + body = [ast.Pass(lineno=expr.start_line, + col_offset=expr.start_column)] + else: + body = self._code_branch(self.compile(expr.pop(0))) + return Try( lineno=expr.start_line, col_offset=expr.start_column, - body=self._code_branch(self.compile(expr.pop(0))), + body=body, handlers=[self.compile(s) for s in expr], finalbody=[], orelse=[]) diff --git a/tests/compilers/test_ast.py b/tests/compilers/test_ast.py index 31daf14..cfafca2 100644 --- a/tests/compilers/test_ast.py +++ b/tests/compilers/test_ast.py @@ -116,14 +116,10 @@ def test_ast_bad_raise(): def test_ast_good_try(): "Make sure AST can compile valid try" + hy_compile(tokenize("(try)")) hy_compile(tokenize("(try 1)")) -def test_ast_bad_try(): - "Make sure AST can't compile invalid try" - cant_compile("(try)") - - def test_ast_good_catch(): "Make sure AST can compile valid catch" hy_compile(tokenize("(catch)")) diff --git a/tests/native_tests/language.hy b/tests/native_tests/language.hy index 9eaf0f5..cbd5254 100644 --- a/tests/native_tests/language.hy +++ b/tests/native_tests/language.hy @@ -162,6 +162,9 @@ (defn test-exceptions [] "NATIVE: test Exceptions" + + (try) + (try (raise (KeyError)) (catch [[IOError]] (assert false))