Use cases for del

Duncan Booth duncan.booth at invalid.invalid
Wed Jul 6 16:50:43 CEST 2005

Peter Hansen wrote:

> Tom Anderson wrote:
>> How about just getting rid of del? Removal from collections could be 
>> done with a method call, and i'm not convinced that deleting variables 
>> is something we really need to be able to do (most other languages 
>> manage without it).
> Arguing the case for del: how would I, in doing automated testing, 
> ensure that I've returned everything to a "clean" starting point in all 
> cases if I can't delete variables?  Sometimes a global is the simplest 
> way to do something... how do I delete a global if not with "del"?
I generally find that unit tests force me to structure the code in a 
cleaner manner, e.g. to not use globals as much, but if you do need to 
delete a global you do it in exactly the same way as you delete anything: 
use the "del" statement:

>>> x = 3
>>> def f():
	global x
	del x

>>> x
>>> f()
>>> x

Traceback (most recent call last):
  File "<pyshell#7>", line 1, in -toplevel-
NameError: name 'x' is not defined

Where I have used 'del' in a unit test it has been to delete local 
variables rather than globals. Specifically I wanted to ensure that some 
data structures were being torn down properly, so the test went something 
like this:

setup: creates a weakref dictionary.

teardown: asserts that the weakref dictionary is empty.

then each test does:

    create something
    add it to the weakref dictionary
    then test it
    use del to remove local variables
    force a garbage collection

Without the del, when a test fails you get two failures, because the 
traceback information keeps the variables alive.

More information about the Python-list mailing list