Search code examples
pythonassertraise

What's the difference between raise, try, and assert?


I have been learning Python for a while and the raise function and assert are (what I realised is that both of them crash the app, unlike try - except) really similar and I can't see a situation where you would use raise or assert over try.

So, what is the difference between raise, try, and assert?


Solution

  • Assert:

    Used when you want to "stop" the script based on a certain condition and return something to help debug faster:

    list_ = ["a","b","x"]
    assert "x" in list_, "x is not in the list"
    print("passed") 
    #>> prints passed
    
    list_ = ["a","b","c"]
    assert "x" in list_, "x is not in the list"
    print("passed")
    #>> 
    Traceback (most recent call last):
      File "python", line 2, in <module>
    AssertionError: x is not in the list
    

    Raise:

    Two reasons where this is useful:

    1/ To be used with try and except blocks. Raise an error of your choosing, could be custom like below and doesn't stop the script if you pass or continue the script; or can be predefined errors raise ValueError()

    class Custom_error(BaseException):
        pass
    
    try:
        print("hello")
        raise Custom_error
        print("world")
    except Custom_error:
        print("found it not stopping now")
    
    print("im outside")
    
    >> hello
    >> found it not stopping now
    >> im outside
    

    Noticed it didn't stop? We can stop it using just exit(1) in the except block.

    2/ Raise can also be used to re-raise the current error to pass it up the stack to see if something else can handle it.

    except SomeError, e:
         if not can_handle(e):
              raise
         someone_take_care_of_it(e)
    

    Try/Except blocks:

    Does exactly what you think, tries something if an error comes up you catch it and deal with it however you like. No example since there's one above.