'Using is not None, may not always work'

D

Doug Fort

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.
 
H

Heiko Wundram

Am Freitag, 6. August 2004 15:15 schrieb Doug Fort:
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.

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.
 
M

Michael Hudson

Heiko Wundram said:
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...

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
 
G

Grant Edwards

Since I installed 2.4a2 I've been getting a warning from
pychecker: Using is not None, may not always work'.

Huh?!

That implies that there are cases where "None is not None" will
evaluate as True. I find that extremely hard to believe.
I thought 'is not None' was the right thing to do.

It's certainly what I want to do if I want to know if a name is
bound to None or not.
I've had problems with 'if not x:', because some objects
return False in this context.

Exactly.
 
P

Peter Otten

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
 
D

Doug Fort

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

Thanks, that it.
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
 

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. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,995
Messages
2,570,230
Members
46,818
Latest member
Brigette36

Latest Threads

Top