简体   繁体   中英

except block does not catch the exception in python

my code is like below

class Something(models.Model)

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

called this method from testcases ,its working but i need to raise exception ,it does not catch the exception and here is my test case

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

its working fine but i need to raise exception from except block

This line:

except Exception():

should be:

except Exception:
def exception(self)
    try:
        Something.objects.all()
    except Exception, err:
        #print err.message (if you want)
        raise err

This will catch the error and print the exact msg if required.

Why catch the Exception just to re-raise it? If you are not doing anything in the except suite except re-raising the exception, then simply do not catch the exception in the first place:

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

If you are doing something nontrivial inside the except suite, then:

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

Then, to test that the exception method raises an Exception:

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

This depends on Something.objects.all() raising Exception .


PS. If exception does not depend on self , then it is best to remove it from the argument list and make exception a staticmethod.

PPS. Exception is a very broad base exception class. A more specific exception would be more helpful for debugging, and allow other code to catch this specific exception instead of forcing it to handle any possible Exception .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM