error in except

John Evans john.g.evans.ne at gmail.com
Mon Feb 4 23:37:10 CET 2013


Should it not be "try-except-else' instead of 'if-except-else'?

            try:
                if delay > 2.0:
                    raise RuntimeError('I think the server is down')
            except:
                raise
            else:
                break


On Mon, Feb 4, 2013 at 5:21 PM, Steven D'Aprano <
steve+comp.lang.python at pearwood.info> wrote:

> Rodrick Brown wrote:
>
> > For the life of me I cant figure out why this exception is being thrown.
> > How could I use pdb to debug this?
> >
> > $ python udp_local2.py server
> >   File "udp_local2.py", line 36
> >     except:
> >          ^
> > SyntaxError: invalid syntax
>
> You can't use pdb to debug it, because you can't run the code until you fix
> the syntax error. You use your text editor to debug it.
>
> Sometimes if you have a missing bracket (round, square or curly), Python
> reports the syntax error on the line *after* where it expected the closing
> bracket.
>
> I've also seen unexpected syntax errors if the source code contains binary
> characters such as DOS end-of-file ^Z. Try opening the file in a hex editor
> and looking for anything that shouldn't be there.
>
> But the most likely problem is that you are mixing tabs and spaces, and
> consequently have inadvertently become confused about the indent level. You
> think that the "except" clause is indented level with a try, but it
> actually is indented level with something else. Using spaces for indents is
> good; using tabs for indents is also good; using both at the same time is a
> nightmare. (Python 3 prohibits this.)
>
> I recommend running TabNanny over the file:
>
> python -m tabnanny <file-or-directory>
>
>
> A couple of comments on your code:
>
> > try:
> >     data = s.recv(MAX)
> > except socket.timeout:
> >     delay *= 2
> >     if delay > 2.0:
> >         raise RuntimeError('I think the server is down')
>
> Five attempts and a total of 3.1 seconds (0.1 + 0.2 + 0.4 + 0.8 + 1.6) is
> rather short to conclude that a server is down, although it depends on what
> sort of server and where it is. I would have thought 30 seconds is more
> appropriate. (By default, wget doesn't time out for 3 minutes, which is
> possibly overkill.)
>
> But either way, I don't think RuntimeError is the right exception to use. I
> expect that a socket error would be more relevant.
>
> > except:
> >     raise
>
> What this does is:
>
> "Unconditionally catch anything. Then raise it again."
>
> Don't do this. The right thing to do here is, just delete it and don't
> catch
> it at all.
>
>
>
>
> --
> Steven
>
> --
> http://mail.python.org/mailman/listinfo/python-list
>



-- 
John Evans
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-list/attachments/20130204/29b5176c/attachment.html>


More information about the Python-list mailing list