'Using is not None, may not always work'

Discussion in 'Python' started by Doug Fort, Aug 6, 2004.

  1. Doug Fort

    Doug Fort Guest

    Hi,

    Since I installed 2.4a2 I've been getting a warning from pychecker: Using
    is not None, may not always work'. I thought 'is not None' was the right
    thing to do. I've had problems with 'if not x:', because some objects
    return False in this context.
     
    Doug Fort, Aug 6, 2004
    #1
    1. Advertisements

  2. Am Freitag, 6. August 2004 15:15 schrieb Doug Fort:
    That's probably what pychecker warns you about: that you might get an object
    in the respective context which evaluates to boolean false, but is not
    None... Although I'd find this strange...

    Heiko.
     
    Heiko Wundram, Aug 6, 2004
    #2
    1. Advertisements

  3. Does seem an odd warning, seeing as when I write "x is not None" I'm
    generally avoiding the case of, e.g., x being the empty list.

    Cheers,
    mwh
     
    Michael Hudson, Aug 6, 2004
    #3
  4. Huh?!

    That implies that there are cases where "None is not None" will
    evaluate as True. I find that extremely hard to believe.
    It's certainly what I want to do if I want to know if a name is
    bound to None or not.
    Exactly.
     
    Grant Edwards, Aug 6, 2004
    #4
  5. Doug Fort

    Peter Otten Guest

    This is harmless. Starting with 2.4a2 None is a constant:

    Python 2.3.3 (#1, Jan 3 2004, 13:57:08)
    [GCC 3.2] on linux2
    Type "help", "copyright", "credits" or "license" for more information..... if x is None: pass
    .... 2 0 LOAD_GLOBAL 0 (x)
    3 LOAD_GLOBAL 1 (None)
    6 COMPARE_OP 8 (is)
    9 JUMP_IF_FALSE 4 (to 16)
    12 POP_TOP
    13 JUMP_FORWARD 1 (to 17)
    Python 2.4a2 (#1, Aug 6 2004, 16:38:38)
    [GCC 3.2] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    [python 2.4a2].... if x is None: pass
    .... 2 0 LOAD_GLOBAL 0 (x)
    3 LOAD_CONST 0 (None)
    6 COMPARE_OP 8 (is)
    9 JUMP_IF_FALSE 4 (to 16)
    12 POP_TOP
    13 JUMP_FORWARD 1 (to 17) 20 RETURN_VALUE


    When PyChecker sees the constant it supposes you are doing something like

    if x is "some string": pass

    which always had the LOAD_CONST op-code and is indeed dangerous. PyChecker
    needs to be fixed to special-case None for 2.4.

    Peter
     
    Peter Otten, Aug 6, 2004
    #5
  6. Doug Fort

    Doug Fort Guest

    Thanks, that it.
     
    Doug Fort, Aug 6, 2004
    #6
    1. Advertisements

Ask a Question

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

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.