So I\'m running into a problem where the try: except: mechanism doesn\'t seem to be working correctly in python.
Here are the contents of my two files.
... at a guess, you have a namespace problem which is producing a different exception.
Try replacing
except:
print 'Why caught here?'
with
except Exception, e:
print e
This may tell you more about what went wrong.
This problem is caused by importing the script you are running as a module. This produces two separate copies of the module!
Another example:
module.py
import module
class Foo: pass
def test():
print Foo
print module.Foo
print Foo is module.Foo
if __name__ == '__main__': test()
main_script.py
import module
if __name__ == '__main__': module.test()
Result
>python main_script.py
module.Foo
module.Foo
True
>python module.py
__main__.Foo
module.Foo
False
Running python somefile.py
creates a module called __main__
, not somefile
, and runs the code in somefile.py
in that module. This is why if __name__ == '__main__':
is used to check if this file is being run as a script or imported from some other file.
The main python program is always imported as the module __main__
.
When you import pytest2
, it doesn't reuse the existing module because the originally imported module has the name __main__
not pytest2
. The result is that pytest1
is run multiple times generating multiple exception classes. __main__.MyError
and pytest1.MyError
You end up throwing one and trying to catch the other.
So, don't try to import your main module from other modules.