Conditional based on whether or not a module is being used

Pete Emerson pemerson at gmail.com
Fri Mar 5 21:25:37 CET 2010


On Fri, Mar 5, 2010 at 12:17 PM, Chris Rebert <clp2 at rebertia.com> wrote:
> 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
>

Except I want to use the module only if the main program is using it
too, not just if it's available for use. I think that I found a way in
my follow-up post to my own message, but not sure it's the best way or
conventional.

Pete



More information about the Python-list mailing list