summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhil Frost <indigo@bitglue.com>2016-05-06 08:40:50 -0400
committerIan Cordasco <sigmavirus24@users.noreply.github.com>2016-05-06 07:40:50 -0500
commitf69d4b415b5f83a2c0b09f494927350f80eb0947 (patch)
treebbca643faa7fdb3e46361796a60b0434a2f9807d
parent29914fc69f300f614e6dde4724cec05dc68a0ea6 (diff)
downloadpyflakes-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--.gitignore1
-rw-r--r--pyflakes/checker.py8
-rw-r--r--pyflakes/test/test_undefined_names.py9
3 files changed, 17 insertions, 1 deletions
diff --git a/.gitignore b/.gitignore
index ce8aaa7..1fc5e13 100644
--- a/.gitignore
+++ b/.gitignore
@@ -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.