cleaner way to write this try/except statement?
John Salerno
johnjsal at NOSPAMgmail.com
Wed Aug 2 09:48:33 EDT 2006
Peter Otten wrote:
> John Salerno wrote:
>
>> The code to look at is the try statement in the NumbersValidator class,
>> just a few lines down. Is this a clean way to write it? i.e. is it okay
>> to have all those return statements? Is this a good use of try? Etc.
>>
>> Thanks.
>>
>> ----------------------------
>>
>> import wx
>>
>>
>> class NumbersValidator(wx.PyValidator):
>>
>> def __init__(self):
>> wx.PyValidator.__init__(self)
>>
>> def Clone(self):
>> return NumbersValidator()
>>
>> def Validate(self, parent):
>> text_ctrl = self.GetWindow()
>> text = text_ctrl.GetValue()
>>
>> try:
>> if not text or int(text) <= 0:
>> wx.MessageBox('Enter a valid time.', 'Invalid time
>>
>> entered', wx.OK | wx.ICON_ERROR)
>> return False
>> else:
>> return True
>> except ValueError, error:
>> wx.MessageBox('Enter a valid time.', 'Invalid time entered',
>> wx.OK | wx.ICON_ERROR)
>> return False
>>
>> def TransferToWindow(self):
>> return True
>>
>> def TransferFromWindow(self):
>> return True
>
> Here's how I might do it:
>
> def is_positive_int_str(s):
> try:
> value = int(s)
> except ValueError:
> return False
> return value > 0
>
> class PositiveIntegerValidator(wx.PyValidator):
> # ...
> def Validate(self, parent):
> text = self.GetWindow().GetValue()
> if is_positive_int_str(text):
> return True
> wx.MessageBox(...)
> return False
>
> Two usability notes:
> - "Invalid time entered" is a confusing message when you actually want a
> positive integer.
> - Pop-up messages are a major annoyance. An alternative would be to change
> the text color of the control and show a hint as to what input you expect
> in a status bar.
>
> Peter
>
Thanks for all the help guys! I'm going to rework it a little and see
what happens. Luckily, I'm also reading the chapter on exceptions in
Python in a Nutshell, so maybe that will help solidify my understanding
of how to construct them in this situation.
More information about the Python-list
mailing list