Home > Dive Into Python > Getting To Know Python > Testing modules | << >> |
diveintopython.org | |
Python for experienced programmers | |
Python modules are objects and have several useful attributes. You can use this to easily test your modules as you write them.
Example 1.7. The if __name__ trick
if __name__ == "__main__":
Two quick observations before we get to the good stuff. First, parentheses are not required around the if expression. Second, like C, Python uses == for comparison and = for assignment. Unlike C, Python does not support in-line assignment, so there's no chance of accidentally assigning the value you thought you were comparing.
So why is this particular if statement a trick? Modules are objects, and all modules have a built-in attribute __name__. A module's __name__ depends on how you're using the module. If you import the module, then __name__ is generally the module's filename, without directory path or file extension. But you can also run the module directly as a standalone program, in which case __name__ will be a special default value, __main__.
Example 1.8. An imported module's __name__
>>> import odbchelper >>> odbchelper.__name__ 'odbchelper'
Knowing this, you can design a test suite for your module within the module itself by putting it in this if statement. When you run the module directly, __name__ is __main__, so the test suite executes. When you import the module, __name__ is something else, so the test suite is ignored. This makes it easier to develop and debug new modules before integrating them into a larger program.
![]() | |
On MacPython, there is an additional step to make the if __name__ trick work. Pop up the module's options menu by clicking the black triangle in the upper-right corner of the window, and make sure Run as __main__ is checked. |
« Indenting code | Dictionaries 101 » |