diff --git a/dubbo/client.py b/dubbo/client.py
index 99cb17c..44bd8a1 100644
--- a/dubbo/client.py
+++ b/dubbo/client.py
@@ -163,7 +163,7 @@
         providers = filter(lambda provider: provider['scheme'] == 'dubbo', map(parse_url, providers))
         if not providers:
             logger.debug('no providers for interface {}'.format(interface))
-            del self.hosts[interface]
+            self.hosts[interface] = []
             return
         self.hosts[interface] = map(lambda provider: provider['host'], providers)
 
@@ -186,8 +186,7 @@
                 conf[configurator['host']] = configurator['fields'].get('weight', 100)
             self.weights[interface] = conf
         else:
-            # 没有权重配置则意味着此配置可以被删除
-            del self.weights[interface]
+            self.weights[interface] = {}
 
     def _register_consumer(self, providers):
         """
@@ -230,8 +229,10 @@
         :return:
         """
         hosts = self.hosts[interface]
+        if not hosts:
+            raise RegisterException('no providers for interface {}'.format(interface))
         # 此接口没有权重设置，使用朴素的路由算法
-        if interface not in self.weights:
+        if interface not in self.weights or not self.weights[interface]:
             return random.choice(hosts)
 
         weights = self.weights[interface]
@@ -244,7 +245,7 @@
             if hit <= sum(hosts_weight[:i + 1]):
                 return hosts[i]
 
-        raise RegisterException('error for finding [{}] host with weight.'.format(interface))
+        raise RegisterException('Error for finding [{}] host with weight.'.format(interface))
 
     def close(self):
         self.zk.stop()
