Use cases for del
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():
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
setup: creates a weakref dictionary.
teardown: asserts that the weakref dictionary is empty.
then each test does:
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