Skip to content

Commit fc2325b

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

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
@@ -864,10 +864,12 @@ def on_conditional_branch():
864864
if isinstance(self.scope, FunctionScope) and name in self.scope.globals:
865865
self.scope.globals.remove(name)
866866
else:
867-
try:
868-
del self.scope[name]
869-
except KeyError:
867+
binding = self.scope.get(name, None)
868+
if not binding or isinstance(binding, Builtin):
870869
self.report(messages.UndefinedName, node, name)
870+
return
871+
872+
del self.scope[name]
871873

872874
def handleChildren(self, tree, omit=None):
873875
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)