<div dir="ltr"><div>One more thing, apart from what Albert mentioned.</div><div>Exceptions must be classes or instances. In effect you cannot just do 'raise'. 'raise' statement must be followed by a class or an instance.</div>
<div> </div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Tue, Feb 5, 2013 at 6:28 AM, Albert Hopkins <span dir="ltr"><<a href="mailto:marduk@letterboxes.org" target="_blank">marduk@letterboxes.org</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5"><br>
<br>
On Mon, Feb 4, 2013, at 04:49 PM, Rodrick Brown wrote:<br>
> For the life of me I cant figure out why this exception is being thrown.<br>
> How could I use pdb to debug this?<br>
><br>
> $ python udp_local2.py server<br>
>   File "udp_local2.py", line 36<br>
>     except:<br>
>          ^<br>
> SyntaxError: invalid syntax<br>
><br>
><br>
> #!/usr/bin/env python<br>
><br>
> import random, socket, sys<br>
> s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)<br>
><br>
> MAX = 65535<br>
> PORT = 1060<br>
><br>
> if 2 <= len(sys.argv) <= 3 and sys.argv[1] == 'server':<br>
>     interface = sys.argv[2] if len(sys.argv) > 2 else ''<br>
>     s.bind((interface, PORT))<br>
>     print 'Listening at', s.getsockname()<br>
>     while True:<br>
>         data, address = s.recvfrom(MAX)<br>
>         if random.randint(0, 1):<br>
>             print 'The client at', address, 'says:', repr(data)<br>
>             s.sendto('Your data was %d bytes' % len(data), address)<br>
>         else:<br>
>             print 'Pretending to drop packet from', address<br>
><br>
> elif len(sys.argv) == 3 and sys.argv[1] == 'client':<br>
>     hostname = sys.argv[2]<br>
>     s.connect((hostname, PORT))<br>
>     print 'Client socket name is', s.getsockname()<br>
>     delay = 0.1<br>
>     while True:<br>
>         s.send('This is another message')<br>
>         print 'Waiting up to', delay, 'seconds for a reply'<br>
>         s.settimeout(delay)<br>
>         try:<br>
>             data = s.recv(MAX)<br>
>         except socket.timeout:<br>
>             delay *= 2<br>
>             if delay > 2.0:<br>
>                 raise RuntimeError('I think the server is down')<br>
>             except:<br>
>                 raise<br>
>             else:<br>
>                 break<br>
>         print 'The server says', repr(data)<br>
>     else:<br>
>         print >> sys.stderr, 'usage: %d server [<interfae>]' %<br>
>         sys.argv[0]<br>
>         print >> sys.stderr, '   or: %d client <host>' % sys.argv[0]<br>
>         sys.exit(2)<br>
</div></div>> --<br>
> <a href="http://mail.python.org/mailman/listinfo/python-list" target="_blank">http://mail.python.org/mailman/listinfo/python-list</a><br>
<br>
Your "except" statement is on the same level as "if delay > 2.0"..<br>
effectively:<br>
<br>
if delay > 2.0<br>
  ...<br>
except:<br>
<br>
which is not valid syntax.  Excepts go with try: blocks, not if: blocks.<br>
<span class="HOEnZb"><font color="#888888">--<br>
<a href="http://mail.python.org/mailman/listinfo/python-list" target="_blank">http://mail.python.org/mailman/listinfo/python-list</a><br>
</font></span></blockquote></div><br></div>