不使用`urllib2.install_opener`危险吗?

时间:2013-06-01 22:55:18

标签: python python-2.7 urllib2

我正在开发一个项目,如果我可以在测试期间模拟urlopen,那将非常方便。有人向我指出,通过嘲笑opener并使用urllib2.install_opener可以(而且很容易)。

但是,由于文档中的这一说明,我很担心:

  

安装OpenerDirector实例作为默认的全局开启者。

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

1 个答案:

答案 0 :(得分:0)

其含义正是您所期望的。在您退出计划或再次致电urllib2.urlopen之前,您计划中对install_opener的所有后续通话都将使用您的开启者。

这是否“危险”取决于您的使用案例。如果你的代码的其他部分正在使用urllib2.open并且你不想让它们被嘲笑,那么是的,这是一个坏主意,因为它们会被嘲笑。

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