Comparison with False - something I don't understand
Mel
mwilson at the-wire.com
Fri Dec 3 04:10:24 EST 2010
Harishankar wrote:
> I think I understand the general trend of what you're saying. It
> definitely requires a mindset change. I still feel that user-defined
> exception classes might not be the way, but maybe I should allow the
> built-in exceptions which are thrown by library functions to follow its
> natural path upwards till it reaches the top level where it could be
> handled.
User-defined exception classes are no big deal, and I think they're helpful.
At the minimum, they're just a few lines in a module, e.g.:
class SumpError (StandardError): '''Errors raised by the SUMP client.'''
class SumpIdError (SumpError): '''The wrong string was returned by an ID
request.'''
class SumpFlagsError (SumpError): '''Illegal combination of flags.'''
class SumpStageError (SumpError): '''Illegal trigger stage setting.'''
This is from a module to drive some special hardware through a serial
connection. At this stage in development, I don't even have try/except
statements for these. It's enough that some typo will not silently put the
hardware into an illegal state, and instead will report
Traceback (most recent call last):
File "logic_sniffer.py", line 184, in OnDeviceCapture
set_sump_options (grabber)
File "logic_sniffer.py", line 21, in set_sump_options
sump.set_flags (demux=True, filter=True, channel_groups=0x0,
external=False, inverted=False) # only 1 channel group
File "/home/mwilson/sandbox/sump-analyzer/sump.py", line 160, in set_flags
raise SumpFlagsError
sump.SumpFlagsError
Because these are subclasses of StandardError, they'll be caught by any
`except StandardError`, which may or may not turn out to be a mistake.
Once development is done, try/except for these will be in some window
methods as part of a wxPython GUI, several call levels above the code that
would raise the exceptions, up where a human user would take steps to change
the way things are being done, or submit a bug report (more likely), or
something.
> Maybe I should handle the error only at the highest level (UI level)
> rather than returning False to flag errors.
>
> One of the reasons why I feared to do this is because I need to know each
> and every exception that might be thrown by the function and litter my
> top-level code with too many exception handlers.
The advantage to the exceptions, is that they only need to be recognized and
caught and handled at the UI level. They don't have to be recognized and
passed back up the call chain from level to level till they get to the right
place -- the way out-of-band error returns have to be.
Mel.
More information about the Python-list
mailing list