On Oct 21, 2004, at 11:18 AM, Sean Hastings wrote:
def fooEdit(self,REQUEST): "foo is a string - foo2 is an int" self.foo = REQUEST.get('foo','') try: self.foo2 = int(REQUEST.get('foo2',0) except ValueError, e: self.foo2 = 0
Then could I say that this would be an example in which catching SOME exception CAN NOT result in inconsistent data?
Depends on the connection between "foo" and "foo2". Maybe 0 is a good default for foo2 if it is not present, but the client wouldn't want it reset to 0 if it was supplied and incorrect. For example imagine the input coming from an HTML form snippet like this. The option for "Shoes" has a small typo. Item: <select name="foo2"> <option value="0">Skirt</option> <option value="1">Jeans</option> <option value="2">Overcoat</option> <option value="e3">Shoes</option> </select> Color: <input type="text" name="foo" size="40" /> You wouldn't want the shoes converted to a skirt just because of a typo in the form. def fooEdit(self,REQUEST): "foo is a string - foo2 is an int" try: newfoo = REQUEST.get('foo','') newfoo2 = int(REQUEST.get('foo2',0) except ValueError, e: raise InvalidInput(e) else: self.foo = newfoo self.foo2 = newfoo2 and have something at a higher level catch InvalidInput and report it to the user. Or maybe in this case, you might be able to report the error within .fooEdit because the changes to the ZODB are moved after the rest of the processing. But that is someone depending on implicit knowledge that .get() and int() won't change the persistent state.