我有这个命令
h = urllib.urlopen("http://google.com/")
我如何检查它是否会检索到我的错误,互联网关闭或我不期望的东西?
例如,像
如果错误 打印'错误'
谢谢
答案 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)
我相信错误会引发异常。如果你抓住它并使用错误代码,你可以轻松地进行适当的错误处理。