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