Python Isn';使用“urllib2.install_opener”是否危险?

Python Isn';使用“urllib2.install_opener”是否危险?,python,python-2.7,urllib2,Python,Python 2.7,Urllib2,我正在从事一个项目,如果我能在测试期间模拟urlopen,这将非常方便。有人向我指出,通过模仿开场白并使用 然而,我很担心,因为文档中有这样一个注释: 安装OpenerDirectory实例作为默认全局opener 这是否意味着,如果我所依赖的其他代码正在使用urlopen,我的程序可能会意外中断?其含义正是您所期望的。在退出或再次调用install\u opener之前,程序中对urlib2.urlopen的所有后续调用都将使用您的opener 这是否“危险”取决于您的用例。如果代码的其他部分

我正在从事一个项目,如果我能在测试期间模拟
urlopen
,这将非常方便。有人向我指出,通过模仿
开场白并使用

然而,我很担心,因为文档中有这样一个注释:

安装OpenerDirectory实例作为默认全局opener


这是否意味着,如果我所依赖的其他代码正在使用
urlopen
,我的程序可能会意外中断?

其含义正是您所期望的。在退出或再次调用
install\u opener
之前,程序中对
urlib2.urlopen
的所有后续调用都将使用您的opener

这是否“危险”取决于您的用例。如果代码的其他部分正在使用
urllib2.open
,并且您不希望对它们进行模拟,那么是的,这是一个坏主意,因为它们将被模拟


在这种情况下,您必须让被模拟的代码调用
my_opener.open
而不是
urllib2.open
。如果您设计要测试的代码,这应该很容易。如果你需要在事后修改代码,这有点棘手,但是有各种各样的可能性。例如,如果您想模拟给定模块中的所有调用,只需替换
foomodule.urllib2=my_opener
并设置
my_opener.urlopen=my_opener.open

我知道使用
install_opener
不是模拟的方法,我只是试图理解使用
install_opener
的含义(假设)。@NT3RP:好吧,我编辑了答案,希望澄清一下,但是……你到底不明白什么?你已经知道它改变了“默认全局开启器”。这正是它的意思。在此之后,在程序中对
urlopen
的任何调用,包括您忘记编写的代码或从其他地方导入的代码,都将获得该打开程序,直到程序结束。