473,387 Members | 1,844 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,387 software developers and data experts.

how to use bool

hi, i have some code where i set a bool type variable and if the value
is false i would like to return from the method with an error msg..
being a beginner I wd like some help here

class myclass:
.........
def mymethod(self):
success=True
msg="all validation OK"
success=validateSthing()
if(success==False):
msg="sthing failed"
return (success,msg)

dosomeprocessing()
.....
success=validateSthingelse()
if(success==False):
msg="sthingelse failed"
return (success,msg)
domoreprocessing()
....
return(success,msg)

i would like to know if this way of doing this is OK..I have need of
many kinds of validations in this ..is there a better way of doing
this ?

thank you

Jan 3 '08 #1
12 1697
ji*********@gmail.com wrote:
hi, i have some code where i set a bool type variable and if the value
is false i would like to return from the method with an error msg..
being a beginner I wd like some help here

class myclass:
.........
def mymethod(self):
success=True
msg="all validation OK"
success=validateSthing()
if(success==False):
msg="sthing failed"
return (success,msg)

dosomeprocessing()
.....
success=validateSthingelse()
if(success==False):
msg="sthingelse failed"
return (success,msg)
domoreprocessing()
....
return(success,msg)

i would like to know if this way of doing this is OK..I have need of
many kinds of validations in this ..is there a better way of doing
this ?
to test boolean values, it's usually better to use plain "if" or "if
not" statements:

if success:
... handle success here ...

if not success:
... handle failure here ...

to report failures, use exceptions (the raise and try/except
statements). see the tutorial for more on this topic.

</F>

Jan 3 '08 #2
ji*********@gmail.com wrote:
hi, i have some code where i set a bool type variable and if the value
is false i would like to return from the method with an error msg..
being a beginner I wd like some help here

class myclass:
.........
def mymethod(self):
success=True
msg="all validation OK"
success=validateSthing()
if(success==False):
msg="sthing failed"
return (success,msg)

dosomeprocessing()
.....
success=validateSthingelse()
if(success==False):
msg="sthingelse failed"
return (success,msg)
domoreprocessing()
....
return(success,msg)

i would like to know if this way of doing this is OK..I have need of
many kinds of validations in this ..is there a better way of doing
this ?
With my philosophical programming hat on the first thing I'd say (as a
fairly beginning python programmer) is "avoid multiple returns from a
function/method if at all possible". They breed all sorts of problems
and errors, in particular if there's any clearing up to do you have to
do it in lots of places (or you forget it in some places).

So:-

def mymethod(self):
msg="sthing failed"
success=validateSthing()
if success:
dosomeprocessing()
.....
success=validateSthingelse()
if success:
domoreprocessing()
....
msg="all validation OK"
return (success,msg)

I've lost the different messages for different errors but you get the
idea.
"if success:" rather than "if (success==True)", more readable. For
the opposite "if not success:".

--
Chris Green
Jan 3 '08 #3
On 03 Jan 2008 16:09:53 GMT, <ti*****@isbd.co.ukwrote:
>
ji*********@gmail.com wrote:
hi, i have some code where i set a bool type variable and if the value
is false i would like to return from the method with an error msg..
being a beginner I wd like some help here

class myclass:
.........
def mymethod(self):
success=True
msg="all validation OK"
success=validateSthing()
if(success==False):
msg="sthing failed"
return (success,msg)

dosomeprocessing()
.....
success=validateSthingelse()
if(success==False):
msg="sthingelse failed"
return (success,msg)
domoreprocessing()
....
return(success,msg)

i would like to know if this way of doing this is OK..I have need of
many kinds of validations in this ..is there a better way of doing
this ?
With my philosophical programming hat on the first thing I'd say (as a
fairly beginning python programmer) is "avoid multiple returns from a
function/method if at all possible". They breed all sorts of problems
and errors, in particular if there's any clearing up to do you have to
do it in lots of places (or you forget it in some places).
This advice is highly controversial, and in the presence of exceptions
it is, at best, voodoo coding. Since your function can exit at any
point whether you do it intentionally or not, if you have crucial
cleanup it's best to write your code in a way that does it correctly
even if you return early. Following this style also often leads to odd
contortions, like extra layers of indentation, and a proliferation of
temporary flags and value-holders that aren't necessary if you write
the code in a more straight forward manner.

Make your decisions on a case by case basis of complexity,
readability, and reliability instead of following pronouncements from
on high (especially decades old pronouncements made in a different
context). Forcing a single return site in the code below adds
complexity, arguable harms readability, and provides *zero* benefit in
the code at hand.
So:-

def mymethod(self):
msg="sthing failed"
success=validateSthing()
if success:
dosomeprocessing()
.....
success=validateSthingelse()
if success:
domoreprocessing()
....
msg="all validation OK"
return (success,msg)

I've lost the different messages for different errors but you get the
idea.
"if success:" rather than "if (success==True)", more readable. For
the opposite "if not success:".

--
Chris Green

--
http://mail.python.org/mailman/listinfo/python-list
Jan 3 '08 #4
Chris Mellon <ar*****@gmail.comwrote:
On 03 Jan 2008 16:09:53 GMT, <ti*****@isbd.co.ukwrote:

ji*********@gmail.com wrote:
hi, i have some code where i set a bool type variable and if the value
is false i would like to return from the method with an error msg..
being a beginner I wd like some help here
>
class myclass:
.........
def mymethod(self):
success=True
msg="all validation OK"
success=validateSthing()
if(success==False):
msg="sthing failed"
return (success,msg)
>
dosomeprocessing()
.....
success=validateSthingelse()
if(success==False):
msg="sthingelse failed"
return (success,msg)
domoreprocessing()
....
return(success,msg)
>
i would like to know if this way of doing this is OK..I have need of
many kinds of validations in this ..is there a better way of doing
this ?
>
With my philosophical programming hat on the first thing I'd say (as a
fairly beginning python programmer) is "avoid multiple returns from a
function/method if at all possible". They breed all sorts of problems
and errors, in particular if there's any clearing up to do you have to
do it in lots of places (or you forget it in some places).

This advice is highly controversial, and in the presence of exceptions
it is, at best, voodoo coding. Since your function can exit at any
point whether you do it intentionally or not, if you have crucial
cleanup it's best to write your code in a way that does it correctly
even if you return early. Following this style also often leads to odd
contortions, like extra layers of indentation, and a proliferation of
temporary flags and value-holders that aren't necessary if you write
the code in a more straight forward manner.
OK, I agree, I had my C hat on (no exceptions).

On the other hand if you end with lots of levels of indentation going
this way it suggests to me that maybe breaking up into more functions
would be a good idea.

Make your decisions on a case by case basis of complexity,
readability, and reliability instead of following pronouncements from
on high (especially decades old pronouncements made in a different
context). Forcing a single return site in the code below adds
complexity, arguable harms readability, and provides *zero* benefit in
the code at hand.
So:-

def mymethod(self):
msg="sthing failed"
success=validateSthing()
if success:
dosomeprocessing()
.....
success=validateSthingelse()
if success:
domoreprocessing()
....
msg="all validation OK"
return (success,msg)

I've lost the different messages for different errors but you get the
idea.
"if success:" rather than "if (success==True)", more readable. For
the opposite "if not success:".

--
Chris Green

--
http://mail.python.org/mailman/listinfo/python-list
--
Chris Green
Jan 4 '08 #5
On Jan 3, 10:09*am, tinn...@isbd.co.uk wrote:
>
With my philosophical programming hat on the first thing I'd say (as a
fairly beginning python programmer) is "avoid multiple returns from a
function/method if at all possible". *They breed all sorts of problems
and errors, in particular if there's any clearing up to do you have to
do it in lots of places (or you forget it in some places).
This conventional wisdom predates the introduction of constructs such
as try-catch-finally. In fact, you are just lulling yourself into
some false security if you think that that single return at the end of
your method is the only exit point of your routine. Exceptions can
(and will) happen just about anywhere.

I know, you had your C hat on, but even C++'ers fall into this trap.
I was on a project that cited explicit delete statements during code
reviews as likely memory leaks in the face of exceptions, and each was
to be replaced with auto-cleanup objects such as auto_ptr. The same
was done for other resource alloc/release pairs, such as locks,
database connections, cursors, etc. These were looooong-running
server processes, and they ran for months with no memory growth at
all.

If I were to suggest a similar topic for Python code reviews, it would
be to look at paired statements and to ensure that the cleanup/
recovery statement was wrapped in a finally block.

There's more than just memory that needs bookkeeping, so garbage
collection wont solve all these other resource management problems.

-- Paul
Jan 4 '08 #6
On Jan 3, 7:49 am, jimgarde...@gmail.com wrote:
hi, i have some code where i set a bool type variable and if the value
is false i would like to return from the method with an error msg..
being a beginner I wd like some help here

class myclass:
.........
def mymethod(self):
success=True
msg="all validation OK"
success=validateSthing()
if(success==False):
msg="sthing failed"
return (success,msg)

dosomeprocessing()
.....
success=validateSthingelse()
if(success==False):
msg="sthingelse failed"
return (success,msg)
domoreprocessing()
....
return(success,msg)

i would like to know if this way of doing this is OK..I have need of
many kinds of validations in this ..is there a better way of doing
this ?

thank you
class SthingError(Exception):
def __init__(self, success, msg):


class myclass:
.........
def mymethod(self):
success=True
if not validateSthing():
msg="sthing failed"
return (success,msg)

dosomeprocessing()
.....
if not validateSthingelse():
msg="sthingelse failed"
return (success,msg)
domoreprocessing()
....
return(success,"all validation OK")
Jan 4 '08 #7
On Jan 4, 8:51 am, bukzor <workithar...@gmail.comwrote:
On Jan 3, 7:49 am, jimgarde...@gmail.com wrote:
hi, i have some code where i set a bool type variable and if the value
is false i would like to return from the method with an error msg..
being a beginner I wd like some help here
class myclass:
.........
def mymethod(self):
success=True
msg="all validation OK"
success=validateSthing()
if(success==False):
msg="sthing failed"
return (success,msg)
dosomeprocessing()
.....
success=validateSthingelse()
if(success==False):
msg="sthingelse failed"
return (success,msg)
domoreprocessing()
....
return(success,msg)
i would like to know if this way of doing this is OK..I have need of
many kinds of validations in this ..is there a better way of doing
this ?
thank you

Please ignore my previous post. I accidentally submitted early. I made
your example runnable (hope you don't mind). The 'pythonic' way to do
error handling is to use exceptions. Below is a pretty good example.
Also I've elimiated all your temporary variables. Your original
function is quite short now and does the same thing. You can expand
out the derived exception class if you want to pass more data to your
error handler, but generally the message is enough, and that comes
with the default constructor.
#helper functions
from time import time
from random import seed
seed(time())
def random(chance):
from random import uniform
if uniform(0, 1) < chance: return True
else: return False
def dosomeprocessing(x):
if random(.1): raise Exception("Something bad happened while
processing %s!" % x)
else: print x
def validateSthing():
if random(.2): raise SthingError("this Sthing is messed up!")
#rewrite of your example
class SthingError(Exception): pass
class myclass:
def mymethod(self):
validateSthing()
dosomeprocessing(1)
validateSthing()
dosomeprocessing(2)

#exercise of the class and error handling
m = myclass()
try:
m.mymethod()
print "Completed successfully!"
except SthingError, ste:
print "STHINGERROR:"
print ste
except Exception, e: print e

print
print "This time no error handling:"
m.mymethod()

Jan 4 '08 #8
hi bukzor & everyone who replied

thanks for the detailed replies
will try to write that way
thanx a lot
jim

bukzor wrote:
On Jan 4, 8:51 am, bukzor <workithar...@gmail.comwrote:

#exercise of the class and error handling
m = myclass()
try:
m.mymethod()
print "Completed successfully!"
except SthingError, ste:
print "STHINGERROR:"
print ste
except Exception, e: print e

print
print "This time no error handling:"
m.mymethod()
Jan 6 '08 #9
On Jan 3, 3:49*pm, jimgarde...@gmail.com wrote:
hi, i have some code where i set a bool type variable and if the value
is false i would like to return from the method with an error msg..
being a beginner I wd like some help here

class myclass:
* * *.........
* * def *mymethod(self):
* * * * * * *success=True
* * * * * * *msg="all validation OK"
* * * * * * *success=validateSthing()
* * * * * * *if(success==False):
* * * * * * * * * *msg="sthing failed"
* * * * * * * * * *return (success,msg)

* * * * * * *dosomeprocessing()
* * * * * * *.....
* * * * * * *success=validateSthingelse()
* * * * * * *if(success==False):
* * * * * * * * * *msg="sthingelse *failed"
* * * * * * * * * *return (success,msg)
* * * * * * *domoreprocessing()
* * * * * * * ....
* * * * * * * *return(success,msg)

i would like to know if this way of doing this is OK..I have need of
many kinds of validations in this ..is there a better way of doing
this ?
As everyone's pointed out, you should use exceptions for this sort of
thing.
def mymethod(self):
success=True
msg="all validation OK"
success=validateSthing()
if(success==False):
msg="sthing failed"
return (success,msg)

dosomeprocessing()
.....
success=validateSthingelse()
if(success==False):
msg="sthingelse failed"
return (success,msg)
domoreprocessing()
....
return(success,msg)
As everyone else has pointed out, you should use exceptions for this
sort of thing. But even without exceptions, you can write your code a
lot more cleanly by omitting all the temporary variables. That way,
you don't have to search around to see where things are used (eg.
seeing where "all validation OK" is used requires you to read every
line of your method).

def mymethod(self):
if not validateSthing():
return (False, "sthing failed")
dosomeprocessing()
....
if not validateSthingelse():
return (False, "sthingelse failed")
domoreprocessing()
...
return (True, "all validation OK")

Isn't that a lot more readable?

--
Paul Hankin
Jan 6 '08 #10


some more doubts in this area,,forgive the ignorance of a beginner

i have

class MyError(Exception):
def __init__(self,msg)
self.msg=msg

now my method that can raise this is

class SomeClass:
...........
def mymethod(self):
if (somecondition):
raise MyError("somecondn failed")

if another method in the same class calls this method but wants to
pass the error to a gui code which calls it,,can i do like this

def callingmethode(self):
try:
mymethod()
except MyError,myerr:
raise myerr

so that I can handle the error in a gui code that calls
callingmethode()

class MyGUI:
def guimethode(self):
someinst=SomeClass()
try:
someinst.callingmethode()
except MyError,myer:
self.dealwithMyError(myer)

is this kind of raising exception the correct way?I am getting syntax
error at
except MyError,myerr:
raise myerr

Jan 6 '08 #11
forget about syntax err.. sorry ..but still would like to know if
raising exception inside an except clause the right way?
Jan 6 '08 #12
ji*********@gmail.com wrote:
...if another method in the same class calls this method but wants to
pass the error to a gui code which calls it,,can i do like this

def callingmethode(self):
try:
mymethod()
except MyError,myerr:
raise myerr

so that I can handle the error in a gui code that calls
callingmethode()

class MyGUI:
def guimethode(self):
someinst=SomeClass()
try:
someinst.callingmethode()
except MyError,myer:
self.dealwithMyError(myer)

is this kind of raising exception the correct way?I am getting syntax
error at
except MyError,myerr:
raise myerr
Almost. The callingmethode code above behaves like:
def callingmethode(self):
mymethod()
except that your code hides the traceback information.
If you need to do something locally (other than passing
along the exception), use either:
def callingmethode(self):
try:
mymethod()
finally:
cleanup_stuff()
or (if you have some exception-specific code to do):
def callingmethode(self):
try:
mymethod()
except MyError,myerr:
stuff_only_for_exceptional_cases()
raise # Note that this keeps the original traceback.
--Scott David Daniels
Sc***********@Acm.Org
Jan 6 '08 #13

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

3
by: Pierre Espenan | last post by:
A have a long integer class. The built integer type within a conditional statement returns bool false for int i=0 and bool true for any other non zero value. I want my long integer class to have...
4
by: Nomak | last post by:
Hello, With this code: $ cat -n ifs.cc 1 #include <vector> 2 #include <iostream> 3 4 using std::vector; 5 using std::cin;
19
by: daniel | last post by:
1) is C++ smart enough to automatically use "bits" for bool or will a bool have the size of a charcter (byte). 2) The index of a vector is it an integer (4 byte) or a "long long" with 8 bytes or...
4
by: ORC | last post by:
Is the bool type actually an Int32 with 0 as false and non zero as true? The reason for my question is that I've seen a lot of API calls that return a Int32 implemented in C# as an bool like: ...
10
by: Mark Jerde | last post by:
I'm trying to learn the very basics of using an unmanaged C++ DLL from C#. This morning I thought I was getting somewhere, successfully getting back the correct answers to a C++ " int SumArray(int...
1
by: Bern McCarty | last post by:
What do you make of this? I cannot tell for sure but it almost seems as the the transition thunk to get back from the native bool method to the managed caller is looking at eax and, if any bit is...
4
by: gpg | last post by:
I am using a legacy DLL and need to marshal some structures for use in the DLL. For the most part, I have figured out my needs except for one small item. I have a structure that contain, among...
6
by: zl2k | last post by:
hi, there I am using a big, sparse binary array (size of 256^3). The size may be changed in run time. I first thought about using the bitset but found its size is unchangeable. If I use the...
64
by: shaanxxx | last post by:
I have code which says #define MYBOOL int This code is very old. people who have written is not avaible. I was thinking what could be reason. 1) bool datatype was not available that time (10...
3
by: markb | last post by:
Hi My C# app is being called from a callback from an unmanaged DLL. One of the parameters of the callback is of type BOOL. I am using PInvoke to marshal this to a (managed) bool. The problem is...
0
by: taylorcarr | last post by:
A Canon printer is a smart device known for being advanced, efficient, and reliable. It is designed for home, office, and hybrid workspace use and can also be used for a variety of purposes. However,...
0
by: aa123db | last post by:
Variable and constants Use var or let for variables and const fror constants. Var foo ='bar'; Let foo ='bar';const baz ='bar'; Functions function $name$ ($parameters$) { } ...
0
by: ryjfgjl | last post by:
In our work, we often receive Excel tables with data in the same format. If we want to analyze these data, it can be difficult to analyze them because the data is spread across multiple Excel files...
0
by: emmanuelkatto | last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud. Please let me know. Thanks! Emmanuel
1
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
0
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
0
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
0
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers,...
0
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.