changeset 23:2bf87f8e1f3f

Handle error
author Thinker K.F. Li <thinker@codemud.net>
date Fri, 01 Apr 2011 00:54:10 +0800
parents 08f19afde7bd
children 81cbe3a35e18
files shada/comm.py
diffstat 1 files changed, 24 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/shada/comm.py	Thu Mar 31 22:14:12 2011 +0800
+++ b/shada/comm.py	Fri Apr 01 00:54:10 2011 +0800
@@ -77,7 +77,15 @@
 
     def _run(self, callable_name, args, env):
         server = self._server
-        calling_gen = server._ns[callable_name](args, env, self)
+        try:
+            cmd = server._ns[callable_name]
+        except KeyError:
+            raise ValueError, 'invalid command name %s' % (callable_name)
+        
+        if not callable(cmd):
+            raise ValueError, 'invalid command name %s' % (callable_name)
+        
+        calling_gen = cmd(args, env, self)
         if calling_gen == None:
             self.exit(0)
         else:
@@ -150,15 +158,21 @@
         
         sock = self._sock
         
-        cmd = sock.recv(3)
-        if cmd == 'REQ':
-            self._handle_req()
-        elif cmd == 'IPK':
-            self._handle_ipk()
-        elif cmd == 'IED':
-            self._handle_ied()
-        else:
-            raise RuntimeError, 'invalid packet %s' % (cmd)
+        try:
+            cmd = sock.recv(3)
+            if cmd == 'REQ':
+                self._handle_req()
+            elif cmd == 'IPK':
+                self._handle_ipk()
+            elif cmd == 'IED':
+                self._handle_ied()
+            else:
+                raise RuntimeError, 'invalid packet %s' % (cmd)
+        except:
+            import traceback
+            traceback.print_exc()
+            self.exit(0)
+            pass
         pass
 
     def recv(self):