What's the tidy/elegant way to protect this against null/empty parameters?
tinnews at isbd.co.uk
tinnews at isbd.co.uk
Tue Oct 16 09:44:54 EDT 2012
Marco Nawijn <nawijn at gmail.com> wrote:
> On Monday, October 15, 2012 1:33:02 PM UTC+2, (unknown) wrote:
> > I want to fix an error in some code I have installed, however I don't
> >
> > really want to just bodge it.
> >
> >
> >
> > The function producing the error is:-
> >
> >
> >
> > def get_text(self, idx): # override !
> >
> > node = self.items[idx]
> >
> >
> >
> > a= [
> >
> > ", ".join(node.tags),
> >
> > node.comment,
> >
> > node.folderName,
> >
> > cd2rd(node.date),
> >
> > node.name,
> >
> > '[' + self.rating_stars[node.rating] + ']'
> >
> > ] [self.select]
> >
> >
> >
> > return a
> >
> >
> >
> >
> >
> > The error occurs when node[] (or at least its members) turn out to be
> >
> > empty, you get a Traceback that ends with:-
> >
> >
> >
> > File "/usr/lib/jbrout/jbrout/listview.py", line 608, in draw_cell layout.set_text(self.get_text(thumbnail_num))
> >
> > File "/usr/lib/jbrout/jbrout.py", line 325, in get_text ", ".join(node.tags),
> >
> > TypeError: sequence item 0: expected string, NoneType found
> >
> >
> >
> > Now its *probably* something higher up the tree causing the problem
> >
> > (it's only one particular image in 20 thousand or so that breaks
> >
> > things) but I really want to just get things working. So, what's the
> >
> > neatest way to protect the get_text() method from empty data?
> >
> >
> >
> >
> >
> > --
> >
> > Chris Green
> Hi,
>
> Instead of protecting against empty data, you could just catch the exception, issue a warning and return a default "error" node which is valid. So something like (not tested):
>
> def get_text(self, idx): # override !
> node = self.items[idx]
>
> error_a = "A valid, but erroneous representation of a"
>
> try:
> a= [
> ", ".join(node.tags),
> node.comment,
> node.folderName,
> cd2rd(node.date),
> node.name,
> '[' + self.rating_stars[node.rating] + ']'
> ] [self.select]
> except TypeError:
> print 'Oops, something went wrong'
> a = error_a
> # You should always have a valid a here (or another exception has occured)
> return a
That sounds like a reasonable approach, thank you (and all the other ideas).
--
Chris Green
More information about the Python-list
mailing list