What's the tidy/elegant way to protect this against null/empty parameters?

Marco Nawijn nawijn at gmail.com
Tue Oct 16 06:07:04 EDT 2012


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 



More information about the Python-list mailing list