【发布时间】:2013-08-02 10:30:12
【问题描述】:
我有一个实用模块utils.py,它使用requests 来执行一些任务。在客户端代码(使用utils)中,我需要处理requests 引发的异常,但我想避免隐式导入requests(即在客户端中)。我怎样才能做到这一点?
utils.py 是(简体)
import requests
def download(url):
# stuff
return requests.get(url)
我希望client.py 类似于
import utils # <-- no "import requests"
try:
utils.download(whatever)
except HTTPError: # <-- not "requests.exceptions.HTTPError"
do stuff
except utils.something 也可以。该名称不需要是全局的。我只想避免在客户端的任何地方提及requests。
对于那些想知道的人,这只是关注点分离的问题。 client.py 不应该关心 utils.download 的具体实现方式以及它使用的底层底层库。
【问题讨论】:
-
无论您执行多少
import requests语句,Python 只实际导入一次。您可以通过将print "request has been imported放入模块范围的请求模块中来验证这一点。它只会打印一次。 -
那么,您的意思是导入所有 utils.py 而不导入 utils.py 中的某些内容(请求)?
-
@Jblasco:我不希望“请求”一词出现在 client.py 中的任何地方。
-
在
utils.py中添加HTTPError = requests.exceptions.HTTPError,然后在client.py中使用except utils.HTTPError:。
标签: python python-2.7 package python-import