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