Самый питонический способ обработки диалоговых окон? - PullRequest
1 голос
/ 19 декабря 2011

Я сделал функцию в своем приложении wxpython, которая открывает окно пароля. Код, представленный в dialogs.py, выглядит следующим образом:

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

Исключения находятся в том же файле:

class WrongPassword(Exception):
    pass

class CancelDialog(Exception):
    pass   

В моей основной программе у меня есть несколько методов, которые выглядят примерно так:

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()

Работает нормально. Но это не похоже на очень хороший и питонский способ обработки диалогов с паролями. Или это?

1 Ответ

1 голос
/ 19 декабря 2011

Я не думаю, что ваша диалоговая функция должна вызывать исключения в этом случае. Просто верните True или False в зависимости от того, прошла проверка или нет. Тогда все, что вам нужно сделать, это:

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

Исключения будут необходимы только для других случайных сбоев, которые вы хотите различить, таких как "Сервер аутентификации не работает"

Еще одна причина, по которой я считаю целесообразным возвращать True или False в этом случае, заключается в том, что тогда вы можете использовать методы модульной аутентификации, которые можно заменить. Например, как django использует единственный метод is_authenticated (), который возвращает логическое значение. Конечное использование должно только волноваться о том, аутентифицировано ли это или нет. Не то, что различные исключения это вызывает конкретно, как закрытие диалога. В некоторых случаях может даже не использоваться диалоговое окно ... может быть командная строка или веб-интерфейс и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...