小编典典

处理urllib2的超时?-Python

python

我正在urllib2的urlopen中使用timeout参数。

urllib2.urlopen('http://www.example.org', timeout=1)

我如何告诉Python,如果超时到期,应该引发自定义错误?


有任何想法吗?


阅读 219

收藏
2020-12-20

共1个答案

小编典典

在极少数情况下要使用except:。这样做会捕获可能很难调试的 任何
异常,并且会捕获包括SystemExit和在内的异常KeyboardInterupt,这些异常会使您的程序恼人。

最简单的说,您会发现urllib2.URLError

try:
    urllib2.urlopen("http://example.com", timeout = 1)
except urllib2.URLError, e:
    raise MyException("There was an error: %r" % e)

以下内容应捕获连接超时时引发的特定错误:

import urllib2
import socket

class MyException(Exception):
    pass

try:
    urllib2.urlopen("http://example.com", timeout = 1)
except urllib2.URLError, e:
    # For Python 2.6
    if isinstance(e.reason, socket.timeout):
        raise MyException("There was an error: %r" % e)
    else:
        # reraise the original error
        raise
except socket.timeout, e:
    # For Python 2.7
    raise MyException("There was an error: %r" % e)
2020-12-20