Behandelt u de time-out van urllib2? – Python

Ik gebruik de time-outparameter binnen de urllib2’s urlopen.

urllib2.urlopen('http://www.example.org', timeout=1)

Hoe vertel ik Python dat als de time-out verloopt, er een aangepaste fout moet worden gegenereerd?


Enig idee?


Antwoord 1, autoriteit 100%

Er zijn maar weinig gevallen waarin u except:wilt gebruiken. Als u dit doet, worden elkeuitzonderingen vastgelegd, die moeilijk te debuggen zijn, en worden uitzonderingen vastgelegd, waaronder SystemExiten KeyboardInterupt, die uw programma vervelend kunnen maken voor gebruik..

Op zijn eenvoudigst zou je urllib2.URLError:

try:
    urllib2.urlopen("http://example.com", timeout = 1)
except urllib2.URLError, e:
    raise MyException("There was an error: %r" % e)

Het volgende zou de specifieke fout moeten vastleggen die optreedt wanneer de verbinding uitvalt:

import urllib2
import socket
class MyException(Exception):
    pass
try:
    urllib2.urlopen("http://example.com", timeout = 1)
except urllib2.URLError, e:
    # For Python 2.6
    if isinstance(e.reason, socket.timeout):
        raise MyException("There was an error: %r" % e)
    else:
        # reraise the original error
        raise
except socket.timeout, e:
    # For Python 2.7
    raise MyException("There was an error: %r" % e)

Antwoord 2, autoriteit 20%

In Python 2.7.3:

import urllib2
import socket
class MyException(Exception):
    pass
try:
    urllib2.urlopen("http://example.com", timeout = 1)
except urllib2.URLError as e:
    print type(e)    #not catch
except socket.timeout as e:
    print type(e)    #catched
    raise MyException("There was an error: %r" % e)

Other episodes