diff options
Diffstat (limited to 'tests/basics/try_finally_return2.py')
| -rw-r--r-- | tests/basics/try_finally_return2.py | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/tests/basics/try_finally_return2.py b/tests/basics/try_finally_return2.py new file mode 100644 index 000000000..e3ea5f1eb --- /dev/null +++ b/tests/basics/try_finally_return2.py @@ -0,0 +1,104 @@ +# test 'return' within the finally block +# it should swallow the exception + +# simple case +def f(): + try: + raise ValueError() + finally: + print('finally') + return 0 + print('got here') +print(f()) + +# nested, return in outer +def f(): + try: + try: + raise ValueError + finally: + print('finally 1') + print('got here') + finally: + print('finally 2') + return 2 + print('got here') +print(f()) + +# nested, return in inner +def f(): + try: + try: + raise ValueError + finally: + print('finally 1') + return 1 + print('got here') + finally: + print('finally 2') + print('got here') +print(f()) + +# nested, return in inner and outer +def f(): + try: + try: + raise ValueError + finally: + print('finally 1') + return 1 + print('got here') + finally: + print('finally 2') + return 2 + print('got here') +print(f()) + +# nested with reraise +def f(): + try: + try: + raise ValueError + except: + raise + print('got here') + finally: + print('finally') + return 0 + print('got here') +print(f()) + +# triple nesting with reraise +def f(): + try: + try: + try: + raise ValueError + except: + raise + except: + raise + finally: + print('finally') + return 0 +print(f()) + +# exception when matching exception +def f(): + try: + raise ValueError + except NonExistingError: + pass + finally: + print('finally') + return 0 +print(f()) + +# raising exception class, not instance +def f(): + try: + raise ValueError + finally: + print('finally') + return 0 +print(f()) |
