Skip to content

Commit 9580f88

Browse files
committed
Fix del builtin regression
An exception to the handling of builtins is they can not be deleted.
1 parent 45fc732 commit 9580f88

File tree

2 files changed

+18
-3
lines changed

2 files changed

+18
-3
lines changed

pyflakes/checker.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -871,10 +871,12 @@ def on_conditional_branch():
871871
if isinstance(self.scope, FunctionScope) and name in self.scope.globals:
872872
self.scope.globals.remove(name)
873873
else:
874-
try:
875-
del self.scope[name]
876-
except KeyError:
874+
binding = self.scope.get(name, None)
875+
if not binding or isinstance(binding, Builtin):
877876
self.report(messages.UndefinedName, node, name)
877+
return
878+
879+
del self.scope[name]
878880

879881
def handleChildren(self, tree, omit=None):
880882
for node in iter_child_nodes(tree, omit=omit):

pyflakes/test/test_undefined_names.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -371,6 +371,19 @@ def test_delUndefined(self):
371371
"""Del an undefined name."""
372372
self.flakes('del a', m.UndefinedName)
373373

374+
def test_del_builtin(self):
375+
"""Del a builtin not possible."""
376+
self.flakes('del range', m.UndefinedName)
377+
378+
def test_del_shadowed_builtin(self):
379+
"""
380+
Del a function with same name as builtin.
381+
"""
382+
self.flakes('''
383+
def range(): pass
384+
del range
385+
''')
386+
374387
def test_delConditional(self):
375388
"""
376389
Ignores conditional bindings deletion.

0 commit comments

Comments
 (0)