Python 尝试:除了:不工作
因此,我遇到了一个问题,即try:except:机制在python中似乎无法正常工作 这是我的两个文件的内容 pytest1.py pytest2.py 执行第一个文件将产生以下输出:Python 尝试:除了:不工作,python,exception,exception-handling,Python,Exception,Exception Handling,因此,我遇到了一个问题,即try:except:机制在python中似乎无法正常工作 这是我的两个文件的内容 pytest1.py pytest2.py 执行第一个文件将产生以下输出: $ python pytest1.py Why caught here? 基本上,没有发现异常。如果我打印出异常类型,它将打印为,而不仅仅是。我想这是一个奇怪的循环引用,但它似乎仍然应该起作用。。。。猜测一下,您有一个名称空间问题,它产生了一个不同的异常 试着替换 except: print 'Why
$ python pytest1.py
Why caught here?
基本上,没有发现异常。如果我打印出异常类型,它将打印为
,而不仅仅是
。我想这是一个奇怪的循环引用,但它似乎仍然应该起作用。。。。猜测一下,您有一个名称空间问题,它产生了一个不同的异常
试着替换
except:
print 'Why caught here?'
与
这可能会告诉您更多有关出错原因的信息。主python程序始终作为模块
\uuuuu main\uuuu
导入
导入pytest2
时,它不会重用现有模块,因为最初导入的模块的名称为\uuuu main\uuuu
而不是pytest2
。结果是多次运行pytest1
,生成多个异常类\uuuu main\uuuu.MyError
和pytest1.MyError
您最终抛出一个并试图捕获另一个
因此,不要尝试从其他模块导入主模块。此问题是由于导入作为模块运行的脚本造成的。这将生成模块的两个单独副本 另一个例子: 模块.py
import module
class Foo: pass
def test():
print Foo
print module.Foo
print Foo is module.Foo
if __name__ == '__main__': test()
import module
if __name__ == '__main__': module.test()
main_script.py
import module
class Foo: pass
def test():
print Foo
print module.Foo
print Foo is module.Foo
if __name__ == '__main__': test()
import module
if __name__ == '__main__': module.test()
结果
>python main_script.py
module.Foo
module.Foo
True
>python module.py
__main__.Foo
module.Foo
False
运行
python somefile.py
会创建一个名为\uuuu main\uuu
的模块,而不是somefile
,并在该模块中运行somefile.py
中的代码。这就是为什么使用检查此文件是作为脚本运行还是从其他文件导入。已确认。将pytest2
更改为import\uuuuu main\uuuuu
并调用\uuuu main\uuuu.func1
使程序按预期运行。(由于某种原因,<>代码>从AuxMaNyl导入Frime1/代码>声称没有<代码> FUNX导入。)您的第二表单不能工作,因为在这种情况下PyTest2正处于导入的中间。它还没有定义func1。使这些模块只包含库代码,并具有一个中心主入口点,该入口点可以从模块中导入所有必要的部分,而不指定任何内容。此外,我还确认了,我只是创建了另一个文件来定义函数和错误,Winston的解决方案解释了这个问题,您可以通过将pytest1 import*
中的行添加到pytest1.py中主代码块的开头(如果uuuu name\uuuu=='uuuu main\uuuu':
)来让代码正常工作,这将把命名空间中的MyError
从
更改为
。
>python main_script.py
module.Foo
module.Foo
True
>python module.py
__main__.Foo
module.Foo
False