所以我遇到了一个问题,尝试:除了:机制在Python中似乎不能正常工作。
这是我两个文件的内容。
Pytest1.py版
import pytest2
class MyError( Exception ):
def __init__( self, value ):
self.value = value
def __str__( self ):
return repr( self.value )
def func1():
raise MyError( 'This is an error' )
def func3():
pytest2.func2()
if __name__ == '__main__':
try:
func3()
except MyError, e:
print 'I should catch here.'
except:
print 'Why caught here?'
pytest2.py版
from pytest1 import func1
def func2():
func1()
执行第一个文件会产生以下输出:
$ python pytest1.py
Why caught here?
基本上,这个例外不会被捕获。如果我打印出异常类型,它将打印为
<pytest1.MyError>
而不仅仅是<MyError>
。我认为这是一个奇怪的循环参考物,但它似乎仍然有效。 最佳答案
主python程序始终作为模块导入。
当导入__main__
时,它不会重用现有模块,因为最初导入的模块的名称为pytest2
not__main__
。结果是,多次运行pytest2
以生成多个异常类。pytest1
和__main__.MyError
最后你扔了一个,试图抓住另一个。
所以,不要试图从其他模块导入主模块。