Python: entrega de excepciones al descargar archivos no existentes usando urllib

Sé cómo descargar un archivo de la web usando python, sin embargo, deseo manejar los casos en los que el archivo que se solicita no existe. En cuyo caso, quiero imprimir un mensaje de error ("404: Archivo no encontrado") y no escribir nada en el disco. Sin embargo, todavía quiero poder continuar ejecutando el programa (es decir, descargando otros archivos en una lista que pueda existir).

¿Cómo hago esto? A continuación se muestra un código de plantilla para descargar un archivo dada su URL (no dude en modificarlo si cree que hay una mejor manera, pero sea conciso y simple).

import urllib
urllib.urlretrieve ("http://www.example.com/myfile.mp3", "myfile.mp3")

preguntado el 03 de mayo de 12 a las 10:05

3 Respuestas

from urllib2 import URLError

try:
    # your file request code here
except URLError, e:
    if e.code == 404:
        # your appropriate code here
    else:
        # raise maybe?

Seguí este guía, que tiene un contenido específico sección sobre el manejo de excepciones, y lo encontré realmente útil.

contestado el 03 de mayo de 12 a las 10:05

import urllib, urllib2
try:
    urllib.urlretrieve ("http://www.example.com/", "myfile.mp3")
except URLError, e:
    if e.code == 404:
        print "4 0 4"
    else:
        print "%s" % e 

Esto es lo que hace tu código. Básicamente intenta recuperar la página web de www.example.com y la escribe en myfile.mp3. No termina en una excepción porque no está buscando myfile.mp3, básicamente escribe todo lo que obtiene en html en myfile.mp3

Si está buscando un código para descargar archivos en una determinada ubicación en la web, intente esto

¿Cómo descargo un archivo zip en Python usando urllib2?

contestado el 23 de mayo de 17 a las 13:05

Tu código debería verse así:

try:
    urllib.urlretrieve ("http://www.example.com/myfile.mp3", "myfile.mp3")
except URLError,e:
    if e.code==404:
        print 'file not found. moving on...'
        pass

Respondido 26 Feb 13, 21:02

Por lo que puedo decir, urllib.urlretrieve no generará un URLError en una respuesta 404. Si el dominio es malo, generará IOError. De lo contrario myfile.mp3 solo contendrá la respuesta html 404. - juancip

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.