Path: csiph.com!x330-a1.tempe.blueboxinc.net!usenet.pasdenom.info!aioe.org!feeder.news-service.com!newsfeed.xs4all.nl!newsfeed6.news.xs4all.nl!xs4all!post.news.xs4all.nl!not-for-mail Return-Path: X-Original-To: python-list@python.org Delivered-To: python-list@mail.python.org X-Spam-Status: OK 0.004 X-Spam-Evidence: '*H*': 0.99; '*S*': 0.00; 'value,': 0.04; 'default.': 0.09; 'none:': 0.09; 'return,': 0.09; 'subject:None': 0.09; 'there?': 0.09; 'received:209.85.214.174': 0.13; 'received:mail- iw0-f174.google.com': 0.13; 'wrote:': 0.15; '"here\'s': 0.16; 'from:addr:rosuav': 0.16; 'from:name:chris angelico': 0.16; 'subject:design': 0.16; 'subject:versus': 0.16; 'pm,': 0.16; 'possibly': 0.16; '(which': 0.20; "doesn't": 0.22; 'header:In- Reply-To:1': 0.22; 'assume': 0.23; 'code': 0.24; 'subject: -- ': 0.25; 'expect': 0.25; 'function': 0.26; 'work.': 0.28; 'fri,': 0.28; 'guess': 0.28; 'received:209.85.214': 0.28; 'message- id:@mail.gmail.com': 0.28; "didn't": 0.29; "it'd": 0.30; 'values,': 0.30; 'required.': 0.31; 'values': 0.31; 'chris': 0.32; 'too': 0.32; 'to:addr:python-list': 0.34; 'there': 0.34; 'none': 0.35; 'explicit': 0.35; 'question': 0.35; 'some': 0.37; 'but': 0.37; 'using': 0.37; 'received:google.com': 0.38; 'received:209.85': 0.38; 'user': 0.38; 'subject:: ': 0.38; 'steven': 0.38; 'should': 0.39; 'data': 0.39; 'returned': 0.39; 'to:addr:python.org': 0.39; 'missing': 0.40; 'received:209': 0.40; 'agreed': 0.40; 'table': 0.40; 'dedicated': 0.62; 'concept': 0.73; 'favour': 0.73; '"spam"': 0.84; 'mistakenly': 0.84 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type; bh=WCY1IZP2oP1Mwe1mool+g/c4XMZSU3aD2loMRIJQQ/I=; b=mL8H5MYuFA17PfaIPPyMr0BqXYyclNEMRzi1uKpJRePBeZZKrchppVYKFKRpibJUPF 5GOQmTBjmfijbnt9vLh2A47a0rzQp8qXBVD3BH8jx0ailCj9o8qEmVwUzgKzy8a8qZs2 I8lDXlXhxIxw4LgaUBUqdYq5cT4/nUguocS/o= MIME-Version: 1.0 In-Reply-To: <4e1fd009$0$29986$c3e8da3$5496439d@news.astraweb.com> References: <4e1fd009$0$29986$c3e8da3$5496439d@news.astraweb.com> Date: Fri, 15 Jul 2011 16:08:41 +1000 Subject: Re: None versus MISSING sentinel -- request for design feedback From: Chris Angelico To: python-list@python.org Content-Type: text/plain; charset=ISO-8859-1 X-BeenThere: python-list@python.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: General discussion list for the Python programming language List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Newsgroups: comp.lang.python Message-ID: Lines: 24 NNTP-Posting-Host: 2001:888:2000:d::a6 X-Trace: 1310710125 news.xs4all.nl 23896 [2001:888:2000:d::a6]:45538 X-Complaints-To: abuse@xs4all.nl Xref: x330-a1.tempe.blueboxinc.net comp.lang.python:9507 On Fri, Jul 15, 2011 at 3:28 PM, Steven D'Aprano wrote: > My question is, should I accept None as the missing value, or a dedicated > singleton? > > In favour of None: it's already there, no extra code required. People may > expect it to work. > > Against None: it's too easy to mistakenly add None to a data set by mistake, > because functions return None by default. I guess the question is: Why are the missing values there? If they're there because some function returned None because it didn't have a value to return, and therefore it's a missing value, then using None as "missing" would make a lot of sense. But if it's a more explicit concept of "here's a table of values, and the user said that this one doesn't exist", it'd be better to have an explicit MISSING. (Which I assume would be exposed as yourmodule.MISSING or something.) Agreed that float('nan') and "" and "spam" are all bad values for Missings. Possibly "" should come out as 0, but "spam" should definitely fail. Chris Angelico