Conditional based on whether or not a module is being used

Chris Rebert clp2 at rebertia.com
Fri Mar 5 15:17:58 EST 2010


On 3/5/10, Pete Emerson <pemerson at gmail.com> wrote:
> In a module, how do I create a conditional that will do something
> based on whether or not another module has been loaded?
>
> Suppose I have the following:
>
> import foo
> import foobar
>
> print foo()
> print foobar()
>
> ########### foo.py
> def foo:
>    return 'foo'
>
> ########### foobar.py
> def foobar:
>    if foo.has_been_loaded(): # This is not right!
>        return foo() + 'bar'      # This might need to be foo.foo() ?
>    else:
>        return 'bar'
>
> If someone is using foo module, I want to take advantage of its
> features and use it in foobar, otherwise, I want to do something else.
> In other words, I don't want to create a dependency of foobar on foo.
>
> My failed search for solving this makes me wonder if I'm approaching
> this all wrong.

Just try importing foo, and then catch the exception if it's not installed.

#foobar.py
try:
    import foo
except ImportError:
    FOO_PRESENT = False
else:
    FOO_PRESENT = True

if FOO_PRESENT:
    def foobar():
        return foo.foo() + 'bar'
else:
    def foobar():
        return 'bar'


You could alternately do the `if FOO_PRESENT` check inside the
function body rather than defining separate versions of the function.

Cheers,
Chris
--
http://blog.rebertia.com



More information about the Python-list mailing list