[Tutor] Tips

Albert-Jan Roskam fomcl at yahoo.com
Wed Jun 18 16:25:41 CEST 2014


----- Original Message -----
> From: Alan Gauld <alan.gauld at btinternet.com>
> To: tutor at python.org
> Cc: 
> Sent: Wednesday, June 18, 2014 11:47 AM
> Subject: Re: [Tutor] Tips
> 
> On 18/06/14 01:15, Nanohard wrote:
>>>  On 2014-06-17 13:35, Alan Gauld wrote:
>>> 
>>>>  Don't test types, use the interface
>>> 
>>>  Can you please explain what you mean by this?
>> 
>>  He means use the Python interpreter, by going to your console and typing 
> "python", or in Windows
>>  it's called 'IDLE'.
> 
> 
> Nope, I meant what Mark and Danny said.
> 
> For example don't do this:
> 
> def add(a,b):
>      if type(a) == int and type(b) == int:
>         return a+b
>      else:
>         raise TypeError
> 
> Just do this:
> 
> def add(a,b):
>      return a+b

Given that the concept of Ducktyping has already been mentioned, is there a reason why you did not mention try-except?
 
def add(a, b):
    try:
        return a + b
    except TypeError:
        raise 
 
Btw, given that:
>>> {}.__add__ 
Traceback (most recent call last): File "", line 1, in AttributeError: 'dict' object has no attribute '__add__'
 
Why does one only need to use 'except TypeError', not 'except (TypeError, AttributeError)' in the try-except above?
>>> {} + 1 
Traceback (most recent call last): File "", line 1, in TypeError: unsupported operand type(s) for +: 'dict' and 'int'


More information about the Tutor mailing list