IOError and Try Again to loop the loop.

The Danny Bos dannybos at gmail.com
Mon Jul 12 00:20:19 EDT 2010



Thanks Chris,

Agreed some of the code is a lot useless, I need to go through that
stuff.
So something like this (apologies for asking for some details, I'm not
good at catching):

items = Item.objects.all().filter(cover='').order_by('-reference_id')
for item in items:
    url = "http://someaddress.org/books/?issue=%s" %
item.reference_id
    url_array = []
    url_open = urllib.urlopen(url)
    url_read = url_open.read().decode('utf-8')

    while True:
        try:
                url_data = simplejson.loads(url_read)
                url_array.append(url_data)
                for detail in url_array:
                        if detail['artworkUrl']:
                                cover_url =
detail['artworkUrl'].replace(' ','%20')
                                cover_open =
urllib.urlretrieve(cover_url)
                                cover_name = os.path.split(cover_url)
[1]
                                item.cover.save(cover_name,
File(open(cover_open[0])), save=True)
                                print "Cover - %s: %s" % (item.number,
url)
                        else:
                                print "Missing - %s: %s" %
(item.number, url)
                break
        except ValueError:
                print "Error Processing record: %s: %s" %
(item.reference_id, url)
                pass
        except IOError:
                print "IOError; Retrying..."
                pass

print "Done"




On Jul 12, 2:14 pm, Chris Rebert <c... at rebertia.com> wrote:
> On Sun, Jul 11, 2010 at 8:13 PM, The Danny Bos <danny... at gmail.com> wrote:
>
>
>
>
>
> > Thanks gang,
> > I'm gonna paste what I've put together, doesn't seem right. Am I way
> > off?
>
> > Here's my code.
> >  - It goes through a table Item
> >  - Matches that Item ID to an API call
> >  - Grabs the data, saves it and creates the thumbnail
> >  - It dies due to Timeouts and Other baloney, all silly, nothing code
> > based.
>
> > items = Item.objects.all().filter(cover='').order_by('-reference_id')
> > for item in items:
> >        url = "http://someaddress.org/books/?issue=%s" % item.reference_id
>
> >        url_array = []
> >        url_open = urllib.urlopen(url)
> >        url_read = url_open.read().decode('utf-8')
>
> >        try:
> >                url_data = simplejson.loads(url_read)
> >                url_array.append(url_data)
>
> >                for detail in url_array:
>
> Unless I'm missing something, there's no need for url_array to exist
> at all. It starts out empty, you append url_data to it, then you
> iterate over it as `detail`; and you don't touch it anywhere else in
> the loop. Just s/detail/url_data/ and excise url_array altogether. As
> a bonus, there'll be one less level of indentation.
>
> Also, the reason your code doesn't work (currently, it just skips to
> the next item upon error) is because you're missing a surrounding
> `while True` loop (and associated embedded `break`) to do the retrying
> (see my or MRAB's examples).
>
> Additionally, stylistically I'd prefer the try-excepts to cover
> smaller and more targeted areas of the code, rather than having one
> giant blanket one for the entire loop body; perhaps that's just me
> though.
>
> Cheers,
> Chris
> --
> How exactly does one acquire a prenominal "The"?http://blog.rebertia.com




More information about the Python-list mailing list