кроме блока не ловит исключение в питоне - PullRequest
1 голос
/ 20 октября 2011

мой код похож на ниже

class Something(models.Model)

    def exception(self)
    try:
       Something.objects.all()
    except Exception():
       raise Exception()

вызвал этот метод из тестовых случаев, работает и вот мой тестовый пример

def test_exception(self):
    instance = Something()
    instance.exception()

работает нормально, но мне нужно вызвать исключение, кроме блока

Ответы [ 3 ]

7 голосов
/ 20 октября 2011

Эта строка:

except Exception():

должна быть:

except Exception:
2 голосов
/ 20 октября 2011
def exception(self)
    try:
        Something.objects.all()
    except Exception, err:
        #print err.message (if you want)
        raise err

Это отлавливает ошибку и печатает точное сообщение, если требуется.

0 голосов
/ 20 октября 2011

Зачем ловить исключение, чтобы просто поднять его? Если вы ничего не делаете в комплекте исключений, кроме повторного вызова исключения, просто не поймайте исключение в первую очередь:

@staticmethod
def exception():
    Something.objects.all()

Если вы делаете что-то нетривиальное внутри except suite, тогда:

def exception(self):
    try:
        Something.objects.all()
    except Exception:
        # do something (with self?)
        raise 

Затем, чтобы проверить, что метод exception вызывает исключение:

def test_exception(self):
    instance = Something()
    self.assertRaises(Exception, instance.exception)

Это зависит от Something.objects.all() повышения Exception.


PS. Если exception не зависит от self, то лучше удалить его из списка аргументов и сделать exception статическим методом.

PPS. Exception - очень широкий базовый класс исключений. Более конкретное исключение будет более полезным для отладки и позволит другому коду перехватить это конкретное исключение вместо того, чтобы заставлять его обрабатывать любые возможные Exception.

...