Python for non-programmers
kragen at dnaco.net
Mon Mar 6 19:25:59 CET 2000
In article <NDBBKEGCHLLCCFMJKMIHEEKPDAAA.infonuovo at email.com>,
Dennis E. Hamilton <infonuovo at email.com> wrote:
>I am teaching my 35-year-old son about programming using Python.
You might try to convince your son to call himself a "whitesmith" or a
"codesmith" rather than a "cybersmith". "Cyber-" is one of those
prefixes that marks you as being one of the, um, out-group.
About Python for beginners: I'm not a beginner at programming (at
least, I don't think so; I've never written a program that was more
than 2000 lines long, though), but I'm a beginner at Python. I had
some irritating problems with error messages when writing my first
useful Python programs this morning.
The more amusing one was the SyntaxError at the end of my
file. The interpreter error message helpfully pointed out the
erroneous line: the blank line at the end of the file, with a
caret helpfully pointing out the beginning of the line.
I looked for unterminated strings, mismatched parens, etc., to
I deleted the several hundred lines of '''-ed out Perl code
before the end of file.
SyntaxError. Blank line with a caret.
I commented out the last routine in the file. No Syntax
I uncommented the first line of the routine ("def test1():").
SyntaxError. Hmm, guess that's where the problem is.
At this point, the Alert Python Reader recognizes that I have
just commented out the original error and inserted a new one.
The Slow Python Newbie, however, doesn't have any idea. I had
a suspicion that was what I had done; I added a 'pass'
statement, and the SyntaxError went away.
Line by line, I uncommented the routine, recompiling ("python
-c 'import rat_cont'") every time. The error was on (surprise)
the last line. I was missing a right-paren.
The point of this painful, boring story is that the error
message was extremely unhelpful, almost to the point of being
actively deceptive. A little more detail ("expected ) matching
( on line 102" --- or even "expected )") would have been
*incredibly* useful. I spent most of my time looking for
mismatched string quotes.
(I hit % in vi a lot more after that, too. :)
I was going to say that Perl was much better about things like
this, because it usually diagnoses my syntax errors correctly,
but in this particular case, it is completely unhelpful.
My second minor irritation was the TypeError. It explained
helpfully, "illegal argument type for built-in operation", and
told me what line it was on. Unfortunately, that line
contained several expressions, one of which contained several
variables and several built-in operations, and as far as I
could tell, there was no way that any of them could have been
anything but an integer.
This really burns me up.
The interpreter is executing my program. It has figured out
what operation it's executing and what types its operands need
to be. It has figured out what subexpressions it's supposed to
be using the results from, what values it's getting from them,
what the types of those values are, and that one of those types
In order to fix it, I need to know all of these things.
So what does the interpeter do? It throws all of this
information away except for the last bit and the line number:
somewhere on line XXX, a built-in operation got a value of
I guess it thinks I will enjoy figuring all that stuff out by
myself; it doesn't want to spoil the fun for me.
(Don't get me wrong; this is way better than C. It's just that
I'm sick and tired of computers, I guess.)
Fortunately, it was a small program, and rerunning the code
with a print statement inserted is not a big deal.
This is one case where Perl is worse, I think; it turned out I
was trying to multiply something by  instead of 2. That's
not an error in Perl; try it sometime. :)
Aside from the jargon-laden error message (try imagining what "illegal
argument type for built-in operation" means to someone for whom
"illegal" means you're going to jail, "argument" is something that
happens when you disagree with someone, "type" in the context of
computers is what you do with the keyboard, and "operation" is what a
person does with a computer.) these error messages are just not very
helpful. I had a pretty good idea of what kinds of things they could
mean, but I still wasted precious time.
<kragen at pobox.com> Kragen Sitaker <http://www.pobox.com/~kragen/>
The Internet stock bubble didn't burst on 1999-11-08. Hurrah!
The power didn't go out on 2000-01-01 either. :)
More information about the Python-list