<html><head/><body><html><head></head><body>I can still see why checking if its callable is a good idea in some cases. Say you call the callback in line 1024 of module mymod:<br>
<br>
self.call[item]()<br>
<br>
And someone hands over a string:<br>
<br>
TypeError: 'string' object is not callable<br>
<br>
And this is what's probably going through the person's head:<br>
<br>
Stupid Python! What did I do wrong now?<br>
<br>
Checking if it's callable works better:<br>
if not callable(self.call[item]):<br>
 raise CallbackError('given callback %s must be callable' % str(item))<br>
<br>
Now the user says:<br>
<br>
Ohhhhh....so that's what I did wrong!!!<br><br><div class="gmail_quote">Ben Finney <ben+python@benfinney.id.au> wrote:<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<pre style="white-space: pre-wrap; word-wrap:break-word; font-family: sans-serif; margin-top: 0px">Neil Girdhar <mistersheik@gmail.com><br />writes:<br /><br /><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #729fcf; padding-left: 1ex;">However, there are plenty of times where you can't do that, e.g., you<br />want to know if something is callable before calling it</blockquote><br />What is a concrete example of *needing* to know whether an object is<br />callable? Why not just use the object *as if it is* callable, and the<br />TypeError will propagate back to whoever fed you the object if it's not?<br /><br /><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #729fcf; padding-left: 1ex;">and similarly if something is reiterable before iterating it and<br />exhausting.</blockquote><br />I have somewhat more sympathy for this desire; duck typing doesn't work<br />so well for this, because by the
time the iterable is exhausted it's too<br />late to deal with its inability to re-start.<br /><br />Still, though, this is the kind of division of responsibility that makes<br />a good program: tell the user of your code (in the docstring of your<br />class or function) that you require a sequence or some other re-iterable<br />object. If you try something that fails on what object you've been<br />given, that's the responsibility of the code that gave it to you. You<br />can be nice by ensuring it'll fail in such a way the caller gets a<br />meaningful exception.<br /></pre></blockquote></div><br>
-- <br>
Sent from my Android phone with K-9 Mail. Please excuse my brevity.</body></html></body></html>