所以我遇到了一个问题,try:except:mechanism在python中似乎没有正常工作。
这是我两份文件的内容。
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?'
from pytest1 import func1
def func2():
func1()
执行第一个文件会产生以下输出:
$ python pytest1.py
Why caught here?
基本上,异常不会被捕获。如果我打印出异常类型,它将打印为<pytest1.MyError>
,而不仅仅是<MyError>
。我认为这是一个奇怪的周期性参考,但它似乎仍然应该工作。
。。。据猜测,您有一个名称空间问题,它产生了一个不同的异常。
尝试替换
与
这可能会告诉你更多的错误。
此问题是由导入作为模块运行的脚本引起的。这将生成模块的两个单独副本!
另一个例子:
模块.py
main_script.py
结果
运行
python somefile.py
将创建一个名为__main__
、notsomefile
的模块,并在该模块中运行somefile.py
中的代码。这就是为什么if __name__ == '__main__':
用于检查此文件是作为脚本运行还是从其他文件导入。主python程序总是作为模块
__main__
导入。当导入
pytest2
时,它不会重用现有模块,因为最初导入的模块名为__main__
,而不是pytest2
。结果是pytest1
多次运行,生成多个异常类。__main__.MyError
和pytest1.MyError
最后你扔了一个,试图抓住另一个。所以,不要试图从其他模块导入主模块。
相关问题 更多 >
编程相关推荐