...or did you want to do something more like:
# MyClass() will return None if the args are bad...
foo = MyClass(args, which, may, be, bad)
if foo is None:
print "Bad args, bad!
?
If so, you need to do a check in the class's __new__:
class MyClass(object):
def __new__(cls, *args):
if badArgs(args):
return None
return super(MyClass, cls).__new__(cls)
def __init__(self, *args):
# do normal init stuff...
On Wed, Apr 28, 2010 at 2:42 PM, Paul Molodowitch <[email protected]> wrote:
> So you just want to do something like:
>
> try:
> foo = MyClass(args, which, may, be, bad)
> except TypeError:
> print "Bad args, bad!"
>
> ?
>
>
> If so, just raise an exception in your class's init:
>
> class MyClass(object):
> def __init__(self, *args):
> if badArgs(args):
> raise TypeError
> # do other stuff...
>
> On Wed, Apr 28, 2010 at 11:10 AM, shawnpatapoff <[email protected]>
> wrote:
>> What I mean by 'when a class is called' is when a class is being
>> instanced, or created.
>>
>> On Apr 27, 11:49 pm, Viktoras <[email protected]> wrote:
>>> > I have a class being created and I'm testing the arguments when the
>>> > class is called. Within the class can I error out if the types are
>>> > wrong and prevent the class from returning? How do you guys handle
>>> > this?
>>>
>>> what do you mean by "class is called" ? __init__() ? __call__() ? custom
>>> methods?
>>>
>>> like already said, exceptions are the right way to handle execution flow
>>> when errors occur.
>>>
>>> usually if you need to do some error checking for argument, you got to
>>> make sure there's only one
>>> way for data to enter, e.g. this is two ways for data to enter, you'd
>>> have to check at two places:
>>>
>>> class Person:
>>> def __init__(self,name):
>>> # name comes unchecked here
>>> self.name = name
>>>
>>> def setName(self,name)
>>> if name is None:
>>> raise BadNameException,'name cannot be empty'
>>> if len(name)<2:
>>> raise BadNameException,'name is too short'
>>> self.name = name
>>>
>>> to fix that, you'd need to go with a lightweight constructor (with no
>>> arguments), or use setName() in costructor to
>>> initialize data.
>>>
>>> notice there's no problem with inheriting classes:
>>>
>>> class PersonInDatabase(Person)
>>> def __init__(self,id):
>>> # constructor will fail if setting invalid name from database
>>> self.setName(Database.loadPersonName(id))
>>>
>>> --http://groups.google.com/group/python_inside_maya
>>
>> --
>> http://groups.google.com/group/python_inside_maya
>
--
http://groups.google.com/group/python_inside_maya