brand new to python
Bengt Richter
bokr at oz.net
Sun Mar 13 15:24:41 EST 2005
On 13 Mar 2005 11:22:54 -0800, richard.hubbell at gmail.com wrote:
>I am sure this is old news, the syntax of python is crazy to me.
>There I said it, I'm sure I'll get over it or around it.
>
>I was trying to make a whois script work and was unable.
>
>May be someone with lint-like eyes can tell what's wrong.
I haven't tried
>
>Using xemacs I had hoped that python mode would do more
>for syntax problems, maybe I'm just not using python mode
>correctly in xemacs??
>
>./whois.py yahoo.com
> File "./whois.py", line 117
> class DomainRecord:
> ^
>SyntaxError: invalid syntax
Yeah, that's not terribly informative. But notice that all your try/except pairs aren't lined up.
The second except is at the same indentation as the first below the second try. Multiple excepts
are legal under a try, but in your case it leaves the outer (first) try without any matching-indent except.
After fixing that, you may have to join some broken lines, if your post is accurately reflecting your source.
[...]
> ## try until we are connected
>
> while s == None:
> try:
The above try has no matching except
> s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
> s.setblocking(0)
> try:
> s.connect(whoisserver, 43)
> except socket.error, (ecode, reason):
> if ecode in (115, 150):
> pass
> else:
> raise socket.error, (ecode, reason)
> ret = select.select([s], [s], [], 30)
>
> if len(ret[1]) == 0 and len(ret[0]) == 0:
> s.close()
> raise TimedOut, "on connect "
> s.setblocking(1)
>
> except socket.error, (ecode, reason):
The above except is at the same indentation as the previous one,
which is legal syntax, but you probably meant it to match the first try?
> print ecode, reason
> time.sleep(10)
> s = None
>
> s.send("%s \n\n" % domainname)
> page = ""
> while 1:
> data = s.recv()
> if not data: break
>
> page = page + data
>
> s.close()
>
> if string.find(page, "No match for") != -1:
> raise NoSuchDomain, domainname
>
> if string.find(page, "No entries found") != -1:
> raise NoSuchDomain, domainname
>
> if string.find(page, "no domain specified") != -1:
> raise NoSuchDomain, domainname
>
> if string.find(page, "NO MATCH") != -1:
> raise NoSuchDomain, domainname
> return page
Careful with the above return's indentation after you fix the try/excepts.
>
>##
>##
>----------------------------------------------------------------------
I've heard pychecker (http://pychecker.sourceforge.net/) catches a lot of stuff.
Maybe it would help you. Having lint-eyes, I haven't yet tried it, though it
would probably save me some time ;-)
Regards,
Bengt Richter
More information about the Python-list
mailing list