Fehler von urllib2 abfangen? [solved]

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
root_tux_linux
User
Beiträge: 36
Registriert: Sonntag 16. Dezember 2007, 04:18

Fehler von urllib2 abfangen? [solved]

Beitragvon root_tux_linux » Sonntag 16. März 2008, 17:15

Juten Tag :)

Hab da ein kleines Problem.

Mein Script ruft mittels urllib2.urlopen() eine Adresse auf, ab und an kommt es vor das es ich ein urllib2.HTTPError, urllib2.URLError Fehlermeldung erhalte die weiter nicht tragisch ist nur optisch nicht schön.

Also hab ich folgendes gemacht:

Code: Alles auswählen

try:
 CODE
except (urllib2.HTTPError, urllib2.URLError):
 pass


Das Problem ist jedoch das die Fehlermeldung dennoch kommt.
Selbst wenn ich folgendes mache:

Code: Alles auswählen

try:
 CODE
except:
 pass

Alles andere wird abgefangen nur die urllib2 Meldungen nicht. :(

Jemand ne Idee?
Zuletzt geändert von root_tux_linux am Dienstag 18. März 2008, 18:39, insgesamt 1-mal geändert.
AMD Athlon 64 X2 6000+, ASUS M2N-SLI Deluxe, ASUS EN8600GTS Silent, 4GB Apacer DDR2 800Mhz | Gentoo Linux x86_64
AMD Sempron 2500+, MSI KT4, ASUS N6200, 2x 512MB Apacher DDR 400Mhz, Hauppauge PVR150 | Arch Linux i686
### Sorry for my bad english ###
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Sonntag 16. März 2008, 17:24

Wie sieht der Fehler aus? Ist es überhaupt eine Exception, oder vielleicht doch eine Warning?
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Sonntag 16. März 2008, 17:32

Evtl. wird auf stderr ein Hinweis ausgegeben?

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
root_tux_linux
User
Beiträge: 36
Registriert: Sonntag 16. Dezember 2007, 04:18

Beitragvon root_tux_linux » Sonntag 16. März 2008, 21:59

Code: Alles auswählen

 
  File "/usr/lib/python2.5/urllib2.py", line 380, in open
    response = meth(req, response)
  File "/usr/lib/python2.5/urllib2.py", line 491, in http_response
    'http', request, response, code, msg, hdrs)
  File "/usr/lib/python2.5/urllib2.py", line 418, in error
    return self._call_chain(*args)
  File "/usr/lib/python2.5/urllib2.py", line 353, in _call_chain
    result = func(*args)
  File "/usr/lib/python2.5/urllib2.py", line 499, in http_error_default
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 503: Forwarding failure


Das wär die Fehlermeldung :)
AMD Athlon 64 X2 6000+, ASUS M2N-SLI Deluxe, ASUS EN8600GTS Silent, 4GB Apacer DDR2 800Mhz | Gentoo Linux x86_64

AMD Sempron 2500+, MSI KT4, ASUS N6200, 2x 512MB Apacher DDR 400Mhz, Hauppauge PVR150 | Arch Linux i686

### Sorry for my bad english ###
Benutzeravatar
helduel
User
Beiträge: 300
Registriert: Montag 23. Juli 2007, 14:05
Wohnort: Laupheim

Beitragvon helduel » Montag 17. März 2008, 08:32

Moin,

bist du sicher, dass das komplette URL-Handling innerhalb des try-except-Blocks geschieht? Oder öffnest du vielleicht nur die URL darin und liest später außerhalb des try-except-Blocks? HTTP 503 bedeutet, dass der Service vorübergehend nicht zu erreichen ist (wegen Überlastung, z.B.). D.h. öffnen konntest du die URL schon, aber lesen geht momentan nicht.

Gruß,
Manuel
root_tux_linux
User
Beiträge: 36
Registriert: Sonntag 16. Dezember 2007, 04:18

Beitragvon root_tux_linux » Montag 17. März 2008, 23:29

helduel hat geschrieben:Moin,

bist du sicher, dass das komplette URL-Handling innerhalb des try-except-Blocks geschieht? Oder öffnest du vielleicht nur die URL darin und liest später außerhalb des try-except-Blocks? HTTP 503 bedeutet, dass der Service vorübergehend nicht zu erreichen ist (wegen Überlastung, z.B.). D.h. öffnen konntest du die URL schon, aber lesen geht momentan nicht.

Gruß,
Manuel


Eigentlich schon.

Die eine Funktion die ProxyHandler, build_opener und addheader übergibt steht ausserhalb des Try. Spielt aber doch keine Rolle wenn ich die Funktion erst im Try mittels proxy() aufrufe oder seh ich das falsch?

Code: Alles auswählen

def proxy():
    global proxy_handler, opener
    proxy = raw_input('Switch proxyserver off? (default on): ')
    proxy_handler = urllib2.ProxyHandler({'http': 'localhost:8118'})

    if not proxy:
        opener = urllib2.build_opener(proxy_handler)
    else:
        opener = urllib2.build_opener()
    opener.addheaders = [('User-agent', 'python rockz!')]


Also:

Code: Alles auswählen

def proxy():
    global proxy_handler, opener
    proxy = raw_input('Switch proxyserver off? (default on): ')
    proxy_handler = urllib2.ProxyHandler({'http': 'localhost:8118'})

    if not proxy:
        opener = urllib2.build_opener(proxy_handler)
    else:
        opener = urllib2.build_opener()
    opener.addheaders = [('User-agent', 'python rockz!')]

try:
 proxy()
 CODE
except (urllib2.HTTPError, urllib2.URLError):
 pass
AMD Athlon 64 X2 6000+, ASUS M2N-SLI Deluxe, ASUS EN8600GTS Silent, 4GB Apacer DDR2 800Mhz | Gentoo Linux x86_64

AMD Sempron 2500+, MSI KT4, ASUS N6200, 2x 512MB Apacher DDR 400Mhz, Hauppauge PVR150 | Arch Linux i686

### Sorry for my bad english ###
EyDu
User
Beiträge: 4866
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Beitragvon EyDu » Dienstag 18. März 2008, 00:52

Lauf doch mal mit einem Debugger durch, vielleicht übersiehst du irgendwo einfach nur eine Kleinigkeit.

Und noch ein kurzer Tipp zu deinem Code: "global" ist wirklich böse und führt oftmals zu aüßerst kniffligen Fehlern! Gibt den Proxy-Handler und den Opener einfach als Rückgabewert aus der "proxy"-Funktion zurück:

Code: Alles auswählen

def proxy():
    proxy = raw_input('Switch proxyserver off? (default on): ')
    proxy_handler = urllib2.ProxyHandler({'http': 'localhost:8118'})

    if not proxy:
        opener = urllib2.build_opener(proxy_handler)
    else:
        opener = urllib2.build_opener()
    opener.addheaders = [('User-agent', 'python rockz!')]
   
    return proxy_handler, opener

try:
 proxy_handler, opener = proxy()
 CODE
except (urllib2.HTTPError, urllib2.URLError):
 pass
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Dienstag 18. März 2008, 07:46

sieh auch [wiki]Die global-Anweisung[/wiki] :lol:

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
root_tux_linux
User
Beiträge: 36
Registriert: Sonntag 16. Dezember 2007, 04:18

Beitragvon root_tux_linux » Dienstag 18. März 2008, 18:39

Hab den Fehler durch nen Kumpel gelöst.

Anscheinend wurde er durch Thread und Urllib2 verursacht :)

Werd das global mit return opener und proxy_handler ersetzen

Trotzdem danke
AMD Athlon 64 X2 6000+, ASUS M2N-SLI Deluxe, ASUS EN8600GTS Silent, 4GB Apacer DDR2 800Mhz | Gentoo Linux x86_64

AMD Sempron 2500+, MSI KT4, ASUS N6200, 2x 512MB Apacher DDR 400Mhz, Hauppauge PVR150 | Arch Linux i686

### Sorry for my bad english ###
Benutzeravatar
Trundle
User
Beiträge: 591
Registriert: Dienstag 3. Juli 2007, 16:45

Beitragvon Trundle » Dienstag 18. März 2008, 18:44

root_tux_linux hat geschrieben:Anscheinend wurde er durch Thread und Urllib2 verursacht :)


Wenn du dort, wo ``CODE`` steht, einen neuen Thread startest und in dem wird die Exception ge`raise`t, dann wird die natürlich nicht von dem try-except-Block abgefangen..
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Dienstag 18. März 2008, 19:07

Trundle hat geschrieben:Wenn du dort, wo ``CODE`` steht, einen neuen Thread startest und in dem wird die Exception ge`raise`t, dann wird die natürlich nicht von dem try-except-Block abgefangen..

Die Moral von der Geschicht': Pseudocode postet man nicht. 8)
My god, it's full of CARs! | Leonidasvoice vs Modvoice
root_tux_linux
User
Beiträge: 36
Registriert: Sonntag 16. Dezember 2007, 04:18

Beitragvon root_tux_linux » Dienstag 18. März 2008, 21:47

Leonidas hat geschrieben:
Trundle hat geschrieben:Wenn du dort, wo ``CODE`` steht, einen neuen Thread startest und in dem wird die Exception ge`raise`t, dann wird die natürlich nicht von dem try-except-Block abgefangen..

Die Moral von der Geschicht': Pseudocode postet man nicht. 8)


Ja, aber das ist mir peinlich meinen Noobiecode zu zeigen ^^
AMD Athlon 64 X2 6000+, ASUS M2N-SLI Deluxe, ASUS EN8600GTS Silent, 4GB Apacer DDR2 800Mhz | Gentoo Linux x86_64

AMD Sempron 2500+, MSI KT4, ASUS N6200, 2x 512MB Apacher DDR 400Mhz, Hauppauge PVR150 | Arch Linux i686

### Sorry for my bad english ###

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder