2010-04-30 75 views

回答

10

urllib.urlopen已被弃用。改为使用urllib2.urlopen,并在文档中提到:

对错误引发URLError

所以做:

try: 
    h = urllib2.urlopen("http://google.com/") 
except urllib2.URLError as e: 
    # do something with the exception e.g. 
    print 'Error:', e.reason 

或只是一个(无意义的)错误消息:

try: 
    h = urllib2.urlopen("http://google.com/") 
except urllib2.URLError: 
    print 'An error occurred.' 

URLError

例外? n urllib2.URLError

处理程序在遇到问题时引发此异常(或派生异常)。它是IOError的一个子类。

原因
此错误的原因。它可以是消息字符串或其他异常实例(远程URL为socket.error,本地URL为OSError)。


你可能想了解Errors and Exceptions

+0

但是有没有变量适用于所有可能的错误?例如IOError? – Shady 2010-04-30 16:28:18

+2

@Shady:那么你可以使用'except:'而不必提到要捕获哪个异常。这将捕获所有的例外,但应该避免。通常你应该总是指定你想要捕获的*哪个*错误。 – 2010-04-30 17:53:27

0

我相信错误时会引发异常。如果你捕捉到并使用错误代码,你可以轻松地做适当的错误处理。

1

可能会发生异常,例如IOError - 您可以使用异常处理来处理此问题。例如:

try: 
    h = urllib.urlopen("http://google.com/") 
except IOError as e:      
    print "Error opening URL" 
3
  • 如果是不能够做一些有意义的,它会引发异常,您可以与try/except接受。

  • urllib.urlopen已弃用urllib2.urlopen

    >>> import urllib2 
    >>> urllib2.urlopen('not a valid URL') 
    Traceback (most recent call last): 
        File "<stdin>", line 1, in <module> 
        ... 
    ValueError: unknown url type: not a valid URL 
    >>> 
    >>> urllib2.urlopen("http://thiswebsitedoesntexistq.com") 
    Traceback (most recent call last): 
        File "<stdin>", line 1, in <module> 
        ... 
    urllib2.HTTPError: HTTP Error 404: Not Found 
    >>> 
    >>> # URLError is the parent class for the errors raised by urlopen 
    ... # if it can parse the URL 
    ... 
    >>> issubclass(urllib2.HTTPError, urllib2.URLError) 
    True 
    

我能赶上这些像

try: 
    urllib2.urlopen(some_url) 
except ValueError: 
    print "Not a real URL" 
except urllib2.HTTPError: 
    print "%s does not exist" % (some_url,) 

或者我可以让,如果我没有有一些理智的方式来反应他们传播。 (通常人们想要捕捉一个错误,以便他们能够打印错误并关闭他们的程序,这通常很愚蠢,因为如果你没有捕捉并修复错误,那么Python就会这么做。)