easy verbose in functions

Steve dippyd at yahoo.com.au
Tue Mar 30 07:57:52 CEST 2004


Hello Pascal,

Pascal wrote:
> Hello,
> 
> I've a function like this:
> def myfunction(data, verbose = False):
>    dothis...
>    if verbose: print 'I do this'
>    dothisother
>    if verbose: print 'I do this other'
>    ...
> 
> How can I do to exclude eachtime the `if verbose` statement?
> 
> I tried `print verbose and 'I do this'` but it's printing `False`.
> So I tried with `verbose = None` in the definition, but it's printing None!

I'm not sure exactly what you are doing because I can't 
duplicate your results.

But I am guessing that what you are doing is passing a 
string "False" instead of the boolean constant False. 
The constant False is only defined in Python 2.2 and 
higher.

You can put something like this at the beginning of 
your program to make sure that False and True are 
defined no matter what version of Python you are using:

try:
     if False:
         pass
except:
     False = 0
     True = not False


Notice the difference between a string and a boolean value:

 >>> print False; print "False"
0
False
 >>> type(False); type("False")
<type 'int'>
<type 'str'>

Likewise None is not the same as "None".


The way I would handle verbose printing in functions is 
to factor out the "verbosity" from the function logic:

def verboseprint(s, verbose):
     if verbose: print s

def myfunction(arg, verbose=False):
     dothis
     verboseprint("Do this", verbose)
     dothat
     verboseprint("Do that", verbose)


That way, if there is a bug in your handling of verbose 
printing, you only need to fix it in one place. If you 
decide to change verbose printing to (say) using a log 
file, you only need to change one place.

The statement:

     print verbose and "Do this"


will not work. If verbose is True, then the term 
(verbose and "Do this") will evaluate to "Do this", and 
Python will print what you expect, namely "Do this".

But if verbose is False, then the term (verbose and "Do 
this") will evaluate to False, and Python will then 
print False, which is not what you want.



-- 
Steven D'Aprano





More information about the Python-list mailing list