Grupos de Google ya no admite nuevas publicaciones ni suscripciones de Usenet. El contenido anterior sigue siendo visible.

'Using is not None, may not always work'

Visto 3 veces
Saltar al primer mensaje no leído

Doug Fort

no leída,
6 ago 2004, 9:15:276/8/04
a
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, Consulting Programmer
http://www.dougfort.com

Heiko Wundram

no leída,
6 ago 2004, 10:12:146/8/04
a pytho...@python.org
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.

Michael Hudson

no leída,
6 ago 2004, 10:16:256/8/04
a
Heiko Wundram <hei...@ceosg.de> writes:

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

--
Well, you pretty much need Microsoft stuff to get misbehaviours
bad enough to actually tear the time-space continuum. Luckily
for you, MS Internet Explorer is available for Solaris.
-- Calle Dybedahl, alt.sysadmin.recovery

Grant Edwards

no leída,
6 ago 2004, 10:54:076/8/04
a
On 2004-08-06, Doug Fort <doug...@dougfort.com> wrote:

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

--
Grant Edwards grante Yow! I was in a HOT
at TUB! I was NORMAL! I was
visi.com ITALIAN!! I enjoyed th'
EARTHQUAKE!

Peter Otten

no leída,
6 ago 2004, 11:02:436/8/04
a
Doug Fort wrote:

> 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.
>>> import dis
>>> def f():
... if x is None: pass
...
>>> dis.dis(f)
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)
>> 16 POP_TOP
>> 17 LOAD_CONST 0 (None)
20 RETURN_VALUE
>>>

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]
>>> import dis
>>> def f():
... if x is None: pass
...
>>> dis.dis(f)
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)
>> 16 POP_TOP
>> 17 LOAD_CONST 0 (None)
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


Doug Fort

no leída,
6 ago 2004, 11:06:296/8/04
a
On Fri, 06 Aug 2004 17:02:43 +0200, Peter Otten wrote:

> Doug Fort wrote:
>
>> 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:

Thanks, that it.

--

0 mensajes nuevos