assert expressions

Wanderer wanderer at dialup4less.com
Tue Jul 24 16:44:57 EDT 2012


On Jul 24, 4:31 pm, Ian Kelly <ian.g.ke... at gmail.com> wrote:
> On Tue, Jul 24, 2012 at 1:57 PM, Wanderer <wande... at dialup4less.com> wrote:
> > If I use the code
>> > assert False, "unhandled option"
>> > I get output like:
>> > option -q not recognized
> > for help use --help
>> > What other expressions can I use other than "unhandled option"? Is there a list somewhere?
>> Are you using argparse or optparse or getopt or something else
> altogether?  And where are you placing this assert?  It would be
> helpful to see some actual code to understand what you are doing.
>> And by the way, assert is a very bad way to check user input or to
> unconditionally raise an exception.  The reason is that if Python is
> invoked with -O, then all assertions are removed from the compiled
> bytecode, and then your unconditional exception code doesn't raise any
> exception at all.  If you want to raise an exception, just do it:
>> raise Exception("unhandled option")
>> Ideally, you would also subclass Exception to create a more specific
> exception class for your custom exception:
>> class UnhandledOptionException(Exception):
>     pass
>> # Then, later on...
>> raise UnhandledOptionException("-q")

I'm using getopt but not at that point. I really don't have a problem.
I'm just curious. I've never seen anything else after
assert False,
Here is some code.
def main(argv=None):
 help_message = \
 ("\nOtFixture.py:\n Set the Optics Test Fixture Light Source Light
Level\n" +
 "Options:\n"
 " -l, --level= <The light level percent of Max: 0.0 to 100.0>\n"
+
 " -v, --verbose: Print messages to the terminal.\n"
 " -h, --help: This message\n")
 level = None
 verbose = False
 helpflag = False
 options = "hl:v"
 long_options = ["help","level=","verbose"]
 if argv is None:
 argv = sys.argv
 try:
 try:
 opts, _args = getopt.getopt(argv[1:],
options,long_options)
 except getopt.error, msg:
 raise Usage(msg)
 for o, a in opts:
 if o in ("-h", "--help"):
 print help_message
 helpflag = True
 elif o in ("-l", "--level"):
 level = a
 elif o in ("-v", "--verbose"):
 verbose = True
 else:
 assert False, "unhandled option"
 if not helpflag:
 if level == None:
 level = raw_input("Enter the light level from 0.0 to
100.0%: ")
 if level.replace(".", "", 1).isdigit():
 level = float(level)
 else:
 msg = "\n" + str(level) + " is not a number.\n"
 raise Usage(msg)
 if verbose and level is not None:
 print "The level is ", level, " percent"
 if level is not None:
 if 0.0 <= level <= 100.0:
 ot = OtFixture(verbose)
 ot.setLightLevel(level)
 print "Light Level set to ", level,"%."
 else:
 msg = "\n" + str(level) + " is not in the range 0.0 to
100.0%\n"
 raise Usage(msg)
 except Usage, err:
 print >>sys.stderr, err.msg
 print >>sys.stderr, "for help use --help"
 return 2
if __name__ == "__main__":
 sys.exit(main())


More information about the Python-list mailing list

AltStyle によって変換されたページ (->オリジナル) /