alex23 a écrit :
On Nov 24, 1:15 pm, Peng Yu <pengyu...@gmail.com> wrote:
Suppose that I have function f() that calls g(), I can put a test on
the argument 'x' in either g() or f(). I'm wondering what is the
common practice.

If I put the test in f(), then g() becomes more efficient when other
code call g() and guarantee x will pass the test even though the test
code in not in g(). But there might be some caller of g() that pass an
'x' that might not pass the test, if there were the test in g().

What you should try to do is make each function as self-contained as
possible. f() shouldn't have to know what is a valid argument for g(),
that's the responsibility of g().

There's no such clear-cut IMHO - it really depends on the context. If f is a user-interface function - a function that deals with user inputs in whatever form - and g is a domain-specific library function, then it's f's responsability to validate user inputs before calling on g (_and_ of course to deal with any exception raised withing g).

As a general rule, "defensive code" should go at the interface level - program's inputs of course, but also, sometimes, at "sub-systems" boundaries.
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to