2011-12-19 4 views
1

私はwxpythonアプリケーションでパスワードボックスをポップアップする機能を作った。 dialogs.pyで現在のコードは、次のようになります。私はこのようになり、いくつかのメソッドを持っている私のメインプログラムでダイアログボックスを処理する最もpythonicな方法?

class WrongPassword(Exception): 
    pass 

class CancelDialog(Exception): 
    pass 

def password_dialog(self, password): 
    # Only ask for password if it actually exist 
    if password == 'False': 
     return True 

    question = 'Put in password:' 
    dialog = wx.PasswordEntryDialog(self, question, 'Password...') 
    if dialog.ShowModal() == wx.ID_OK: 
     if dialog.GetValue() == password: 
      dialog.Destroy() 
      return True 
     else: 
      dialog.Destroy() 
      __wrong_pass() 
      raise WrongPassword 
    else: 
     dialog.Destroy() 
     raise CancelDialog 

例外が同じファイル内にあります:

def on_sort_songs(self, event): 
    """Renumbering the database and sort in artist and title order""" 
    # Check for password first 
    try: 
     dialogs.password_dialog(self, opts.generic['password']) 
    except dialogs.CancelDialog: 
     return 
    except dialogs.WrongPassword: 
     return 

    # Sort database and repopulate GUI 
    self.jbox.sort_songs() 
    self.populate_songlist() 

問題なく動作します。しかし、それはパスワードダイアログを処理する非常に良いとpythonicのようには思われません。またはそれは?

答えて

1

この場合、ダイアログ機能が例外を発生させるべきではないと思います。検証が成功するかどうかに応じて、TrueまたはFalseを返します。そして、すべてを行う必要がある:へ

validated = dialogs.password_dialog(self, opts.generic['password']) 
if validated: 
    print "Yay" 
else: 
    print "Boo" 

例外だけのようなあなたは区別したい他の偶発故障の場合、ために必要となる「認証サーバーダウンしている」

私が考えるもう一つの理由はその良いですこの場合TrueまたはFalseを返すのは、スワップアウトできるモジュラー認証メソッドを使用できるためです。たとえば、djangoがbooleanを返す単一のis_authenticated()メソッドを使用する方法など。最終的な使用は、認証されているかどうかを心配する必要があります。ダイアログが閉じられているように、具体的にどのような例外が発生するかは異なりません。場合によってはダイアログを使用しない場合もあります。コマンドラインやWebインターフェイスなどがあります。

+0

あなたは正しいと思います... –

関連する問題