所以我遇到了一个问题,尝试:除了:机制在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__时,它不会重用现有模块,因为最初导入的模块的名称为pytest2not__main__。结果是,多次运行pytest2以生成多个异常类。pytest1__main__.MyError最后你扔了一个,试图抓住另一个。
所以,不要试图从其他模块导入主模块。

08-04 20:42