2016-05-14 12 views
0

は、私はpythonの2.7.11で、ユーザ定義の例外を除いて持っている問題を理解する助けを少し必要です。Pythonのユーザ定義の例外処理

私はデータをポストし、応答を受信し、かつmyErrorsに私はエラーを処理メイン.IN私は2つのファイルmain.pymyErrors.pyを持っています。声明を除いて、しかしそれも、それがあるべきと思っ実行されません:私は何をしようとしている

は、tryにバージョンエラーを実行しています。私がやっていることは、私はmyErrorsへの応答を渡し、

私の質問がひどい言葉で表現されたfile.-エラーで辞書にそのデータを更新することです。私がしたいことは、エラーハンドラへの応答を渡すことですが、on_responseメソッドのTry:except節に達するまで実行したくありません。だから我々が応答を得たときに成功しなかったら、エラーコードをチェックして例外を発生させてください。今、私がやっていることはエラーを最初にチェックして、ここでの成功のためのチェック(エラーコード)

を実行している。ここメイン

def send_messages(self): 
    response = cm.postData(url=simulateSasServer, jsondata=json_data) 
    self.on_response(response) 

def on_response(self, response): 
myERRORS.myERRORS(response) 
    # if registration is succesful change state to REGISTERED. 
    if 'registrationResponse' in response: 
     try: 
      responseObjects = response['registrationResponse'] 
      for responseObject in responseObjects: 
       if responseObject['error']['errorCode'] == 0: 
        do_action 
     except myErrors.Version(): 
      raise ("version_message") 

myErrors

class myERRORS(Exception): 

error_code = {'SUCCESS': 0, 
       'VERSION': 100, 
       } 

response_data = {} 

def __init__(self, response): 
    self.response_data.update(response) 



class Version(myERRORS): 

def __init__(self): 
    self.name = "VERSION" 
    self.err_code = self.error_code['VERSION'] 
    self.msg = "SAS protocol version used by CBSD is not supported by SAS" 
    self.version_error() 
    if self.version_error() is True: 
     print (self.name, self.err_code, self.msg) 
     raise Exception(self.name, self.err_code, self.msg) 

def version_error(self): 
    response_objects = self.response_data.values()[0] 
    if 'registrationResponse' in self.response_data: 
     for r_object in response_objects: 
      if r_object['error']['errorCode'] == self.error_code['VERSION']: 
       return True 
です

どんな助力でも大歓迎です。

答えて

0

例外について何か特別なことは本当にありません。彼らはクラスです。あなたがしたことは、クラスのインスタンスを作成することです。あなたはそれを上げなかった。変更:

myERRORS.myERRORS(response) 

へ:

raise myERRORS.myERRORS(response) 
+0

ええ、私は私の質問がひどい言葉で表現されたと思います。 私がしたいことは、エラーハンドラに応答を渡すことですが、Try:except句に達するまでは実行したくありません。 だから我々は、応答を取得し、それが成功しない場合は、エラーコードをチェックして、例外を発生させたとき。 は、今私がやっているエラーを最初にチェックして、成功のためのチェック(エラーコード)を実行されます –