Doug said:
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.
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