assert expressions

Discussion in 'Python' started by Wanderer, Jul 24, 2012.

  1. Wanderer

    Wanderer Guest

    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?

    Thanks
    Wanderer, Jul 24, 2012
    #1
    1. Advertising

  2. Wanderer

    Ian Kelly Guest

    On Tue, Jul 24, 2012 at 1:57 PM, Wanderer <> 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")
    Ian Kelly, Jul 24, 2012
    #2
    1. Advertising

  3. Wanderer

    Wanderer Guest

    On Jul 24, 4:31 pm, Ian Kelly <> wrote:
    > On Tue, Jul 24, 2012 at 1:57 PM, Wanderer <> 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())
    Wanderer, Jul 24, 2012
    #3
  4. Wanderer

    Wanderer Guest

    On Jul 24, 4:31 pm, Ian Kelly <> wrote:
    > On Tue, Jul 24, 2012 at 1:57 PM, Wanderer <> 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 left out the Usage class

    class Usage(Exception):
    def __init__(self, msg):
    self.msg = msg
    Wanderer, Jul 24, 2012
    #4
  5. Wanderer

    Wanderer Guest

    On Jul 24, 4:47 pm, Wanderer <> wrote:
    > On Jul 24, 4:31 pm, Ian Kelly <> wrote:
    >
    >
    >
    >
    >
    >
    >
    >
    >
    > > On Tue, Jul 24, 2012 at 1:57 PM, Wanderer <> 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 left out the Usage class
    >
    > class Usage(Exception):
    >     def __init__(self, msg):
    >         self.msg = msg


    I seem to be missing a post.

    Here is the code.

    class Usage(Exception):
    def __init__(self, msg):
    self.msg = msg

    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())

    I don't really have a problem. I'm was just curious.

    How do you invoke python -O? When I run python.exe -O OtFixture.py -q,
    I get the same response. It's a capital letter O, right?
    Wanderer, Jul 24, 2012
    #5
  6. Wanderer

    Ian Kelly Guest

    On Tue, Jul 24, 2012 at 2:44 PM, Wanderer <> wrote:
    > 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.


    It doesn't matter what you put after the assert False, because that
    line is not actually reached. When getopt sees the -q, it immediately
    raises a getopt.error, which you catch and then immediately reraise as
    a Usage exception, which is then caught and printed at the end. The
    chained ifs with the assert statement never even execute in this
    scenario.

    Seeing the assert in context, it makes more sense. It's not
    intercepting some unimplemented option and preventing the program from
    proceeding; it's there as a development tool to catch programming
    errors where an option is added to the getopt configuration but is not
    implemented in the if chain.
    Ian Kelly, Jul 24, 2012
    #6
  7. Wanderer

    Wanderer Guest

    On Jul 24, 5:22 pm, Ian Kelly <> wrote:
    > On Tue, Jul 24, 2012 at 2:44 PM, Wanderer <> wrote:
    > > 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.

    >
    > It doesn't matter what you put after the assert False, because that
    > line is not actually reached.  When getopt sees the -q, it immediately
    > raises a getopt.error, which you catch and then immediately reraise as
    > a Usage exception, which is then caught and printed at the end.  The
    > chained ifs with the assert statement never even execute in this
    > scenario.
    >
    > Seeing the assert in context, it makes more sense.  It's not
    > intercepting some unimplemented option and preventing the program from
    > proceeding; it's there as a development tool to catch programming
    > errors where an option is added to the getopt configuration but is not
    > implemented in the if chain.


    Thanks. Now it makes more sense.
    Wanderer, Jul 24, 2012
    #7
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Jay Douglas
    Replies:
    0
    Views:
    600
    Jay Douglas
    Aug 15, 2003
  2. Robert Brewer
    Replies:
    1
    Views:
    487
    bsmith
    Nov 7, 2004
  3. Thomas Guettler

    assert 0, "foo" vs. assert(0, "foo")

    Thomas Guettler, Feb 23, 2005, in forum: Python
    Replies:
    3
    Views:
    2,519
    Carl Banks
    Feb 23, 2005
  4. Alex Vinokur

    assert(x) and '#define ASSERT(x) assert(x)'

    Alex Vinokur, Nov 25, 2004, in forum: C Programming
    Replies:
    5
    Views:
    912
    Keith Thompson
    Nov 25, 2004
  5. ImpalerCore

    To assert or not to assert...

    ImpalerCore, Apr 27, 2010, in forum: C Programming
    Replies:
    79
    Views:
    1,659
    Richard Bos
    May 17, 2010
Loading...

Share This Page