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.pyt...@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
-- http://mail.python.org/mailman/listinfo/python-list