By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
455,767 Members | 1,357 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 455,767 IT Pros & Developers. It's quick & easy.

easy verbose in functions

P: n/a
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!

Thanks.
Jul 18 '05 #1
Share this Question
Share on Google+
4 Replies


P: n/a
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?


How about defining a function like:

def myprint(arg):
if verbose:
print arg

and using that?

--
Timo Virkkala
Jul 18 '05 #2

P: n/a
pa***********@free.fr (Pascal) wrote in
news:e5**************************@posting.google.c om:
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?


If it offends you that much:

def log_verbose(s):
print s
def log_dummy(s):
pass
def myfunction(data, verbose = False):
if verbose:
log = log_verbose
else:
log = log_dummy
dothis...
log('I do this')
dothisother
log('I do this other')
...

or even pass the log function around as the parameter.

A more general solution might be to use Python's logging facility. That
gives you the opportunity to classify your log messages by different levels
(debug, info, warning, error, critical) and also by the section of program
in a hierarchical arrangement. This gives you the ability to, say, turn on
debug logging for a class, or a module by editing a config file.
Jul 18 '05 #3

P: n/a
Hello Pascal,
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!

Try the logging package?

HTH.
Miki
Jul 18 '05 #4

P: n/a
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
Jul 18 '05 #5

This discussion thread is closed

Replies have been disabled for this discussion.