检查命令在Python中是否有问题?

时间:2010-04-30 16:10:54

标签: python

我有这个命令

h = urllib.urlopen("http://google.com/")

我如何检查它是否会检索到我的错误,互联网关闭或我不期望的东西?

例如,像

如果错误  打印'错误'

谢谢

4 个答案:

答案 0 :(得分:10)

urllib.urlopen已弃用,因为它已在Python 3.0中删除。请改用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

  

例外 urllib2.URLError

     

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

     

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


您可能想了解Errors and Exceptions

答案 1 :(得分: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会做的事情。)

答案 2 :(得分:1)

可能会出现诸如IOError之类的异常 - 您可以使用异常处理来处理此问题。例如:

try:
    h = urllib.urlopen("http://google.com/")
except IOError as e:                     
    print "Error opening URL"

答案 3 :(得分:0)

我相信错误会引发异常。如果你抓住它并使用错误代码,你可以轻松地进行适当的错误处理。