在图书馆或用户代码中处理例外的位置

时间:2016-05-26 03:49:12

标签: python exception exception-handling

我正在使用库来处理与API的交互。 稍后我会用它来创建一些工具。

现在我想知道在哪里真的'处理异常。

  1. 图书馆是否应处理例外情况,并且仅返回错误代码,例如' {"错误":"未找到网址"}'
  2. 将异常传递给用户代码并在此处理
  3. 到目前为止我出现/使用的一些例子

    示例

    import urllib2
    
    class Request:
        def send(self, url):
            try:
                req = urllib2.Request(url)
                request = urllib2.urlopen(req)
                response = request.read()
                return response
            except urllib2.URLError as ue:
                return 'URL not found'
    
    request = Request()
    print request.send('https://not-a-real-url-.com')
    

    打印例外     找不到网址

    但我也可以返回URLError

    <urlopen error [Errno 8] nodename nor servname provided, or not known>
    

    或者引发错误以让用户代码处理

    try:
        print request.send('https://not-a-real-url-.com')
    except urllib2.URLError as ue:
        print 'error'
    

    由于我正在创建库和代码我可以自由地处理它,我认为最好但是如果我想共享库我希望有最好的错误异常,所以用户不是面临巨大的问题,必须进行调试。

    我没有看到任何真正像我一样的问题所以我希望这不是重复的。

    感谢您的投入! 迈克尔

1 个答案:

答案 0 :(得分:0)

我会将它保留在你的最后并添加一个打印追溯的一揽子例外:

import urllib2

class Request:
    def send(self, url):
        try:
            req = urllib2.Request(url)
            request = urllib2.urlopen(req)
            response = request.read()
            return response
        except urllib2.URLError:
            return 'URL not found'
        except Exception as e:
            return 'Error: '+e

request = Request()
print request.send('https://not-a-real-url-.com')