Проверить, была ли у команды какая-то проблема в Python? - PullRequest
1 голос
/ 30 апреля 2010

У меня есть эта команда

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

Как я могу проверить, возвращает ли я какую-то ошибку, интернет или что-то, чего я не ожидаю?

Например, что-то вроде

если ошибка печать 'ОШИБКА'

Спасибо

Ответы [ 4 ]

9 голосов
/ 30 апреля 2010

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.

причина
Причина этой ошибки. Это может быть строка сообщения или другой экземпляр исключения (socket.error для удаленных URL, OSError для локальных URL).


Возможно, вы захотите прочитать о Ошибки и исключения .

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

1 голос
/ 30 апреля 2010

Может возникнуть исключение, такое как IOError - вы можете использовать обработку исключений для решения этой проблемы. Например:

try:
    h = urllib.urlopen("http://google.com/")
except IOError as e:                     
    print "Error opening URL"
0 голосов
/ 30 апреля 2010

Я считаю, что исключение выдается при ошибке. Если вы поймете это и воспользуетесь кодом ошибки, вы легко сможете выполнить соответствующую обработку ошибок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...