Если это не в состоянии сделать что-то, что имеет смысл, это вызовет исключение, которое вы можете принять с помощью 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 и поступит, если вы не поймаете и не исправите ошибку.)