diff options
author | Phil Frost <indigo@bitglue.com> | 2016-05-06 08:40:50 -0400 |
---|---|---|
committer | Ian Cordasco <sigmavirus24@users.noreply.github.com> | 2016-05-06 07:40:50 -0500 |
commit | f69d4b415b5f83a2c0b09f494927350f80eb0947 (patch) | |
tree | bbca643faa7fdb3e46361796a60b0434a2f9807d | |
parent | 29914fc69f300f614e6dde4724cec05dc68a0ea6 (diff) | |
download | pyflakes-f69d4b415b5f83a2c0b09f494927350f80eb0947.tar.gz |
Avoid traceback when exception is del-ed in except (#67)
Fixes a regression introduced by
2a698f87c02a43d4489e30481e9def14ed4b4431.
This would fail with a KeyError:
try:
pass
except Exception as e:
del e
Fixes lp:1578903
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | pyflakes/checker.py | 8 | ||||
-rw-r--r-- | pyflakes/test/test_undefined_names.py | 9 |
3 files changed, 17 insertions, 1 deletions
@@ -2,6 +2,7 @@ *.egg-info *.pyc .tox +/.cache/ /dist/ /build/ docs/_build diff --git a/pyflakes/checker.py b/pyflakes/checker.py index f499727..9545cab 100644 --- a/pyflakes/checker.py +++ b/pyflakes/checker.py @@ -1212,4 +1212,10 @@ class Checker(object): # if the except: block is never entered. This will cause an # "undefined name" error raised if the checked code tries to # use the name afterwards. - del self.scope[node.name] + # + # Unless it's been removed already. Then do nothing. + + try: + del self.scope[node.name] + except KeyError: + pass diff --git a/pyflakes/test/test_undefined_names.py b/pyflakes/test/test_undefined_names.py index 9adc4c1..1464d8e 100644 --- a/pyflakes/test/test_undefined_names.py +++ b/pyflakes/test/test_undefined_names.py @@ -97,6 +97,15 @@ class Test(TestCase): exc ''') + def test_delExceptionInExcept(self): + """The exception name can be deleted in the except: block.""" + self.flakes(''' + try: + pass + except Exception as exc: + del exc + ''') + def test_undefinedExceptionNameObscuringLocalVariableFalsePositive2(self): """Exception names obscure locals, can't be used after. Unless. |