Invoking return through a function?
Rick Johnson
rantingrickjohnson at gmail.com
Sun Oct 29 12:21:51 EDT 2017
On Sunday, October 29, 2017 at 9:19:03 AM UTC-5, Alberto Riva wrote:
> Hello,
>
> I'm wondering if there is a way of writing a function that
> causes a return from the function that called it. To
> explain with an example, let's say that I want to exit my
> function if a dict does not contain a given key. I could
> write:
>
> def testFun():
> ...
> if key not in dict:
> return
> ...
>
> But if this is a test I need to do a lot of times, I'd like
> to replace it with something shorter and more explicit:
>
> def testFun():
> ...
> checkKey(dict, key)
> ...
>
> and I'd like checkKey to cause a return *from testFun*.
But under what exact _circumstances_?
So, you'd like a call to `checkKey(...)` to cause a return
in `testFunc` when:
(1) the key exists?
(2) the key doesn't exist?
(3) the dict is actually a list?
(3) The call raises an exception?
(4) a seg fault occurs?
(5) GvR regains his sanity, self-respect and dignity by
86'ing type-hints?
Be more specific please. And _always_ refer to a named
function by _name_. Never use random or implicit aliases
(aka: "the function", "my function", etc...) in your prose.
Both functions *ARE* functions, dontchaknow?
> In a language like Lisp
Python is nothing like Lisp, and for good reason! Sure, we
have a few lispers and functional fanboys who hang around
here, and sometimes Rustom can get a little preachy about
FP, but mostly, we tolerate the fanboyism -- so long as it's
not rabid fanboyism.
> this would be accomplished by defining checkKey as a macro
> that expands into the code shown in my first example, so
> that the return would be inside testFun and not insted
> checkKey. Is there a way of doing something like this in
> Python?
Thankfully, no. But i wouldn't underestimate the rebellious
nature of this generation of Py-dev'ers, and the propensity
of these folks to entertain feature creep.
> Another way of phrasing my question is: is there a way to
> cause a return from a function that is higher up in the
> call stack, rather than the currently active one, without
> using try/except?
Possibly. But you've already poo-pooed the easy and obvious
solution of using conditional logic.
More information about the Python-list
mailing list