[Python-Dev] complex I/O problem

Guido van Rossum gvanrossum at gmail.com
Tue Feb 1 18:27:45 CET 2005


On Tue, 1 Feb 2005 12:16:10 -0500, A.M. Kuchling <amk at amk.ca> wrote:
> On Tue, Feb 01, 2005 at 11:11:37AM -0500, Neal Becker wrote:
> > complex ('(2+2j)')
> > Traceback (most recent call last):
> >   File "<stdin>", line 1, in ?
> > ValueError: complex() arg is a malformed string
> >
> > Whatever format is used for output should be accepted as input!
> 
> This isn't true in general; it's not true of strings, for example, nor
> of files.  Parsing complex numbers would be pretty complicated,
> because it would have to accept '(2+2j)', '2+2j', '3e-6j', and perhaps
> even '4j+3'.  It seems easier to just use eval() than to make
> complex() implement an entire mini-parser.

Well, complex('2+2j') works, so it's not that far...

But the rules are different:

- There's no requirement whatsoever for str(); it can be whatever
makes the most sense for the type.

- For repr(), if at all possible, eval(repr(x)) == x should hold, in a
suitable environment (you may have to import certain things in the
namespace). If this can't be made true, repr(x) should be of the form
<...>.

- If there's no need for str() and repr() to be different, let str(x)
== repr(x).

So I think complex() is just fine.

-- 
--Guido van Rossum (home page: http://www.python.org/~guido/)


More information about the Python-Dev mailing list