Adding information to an exception?

前端 未结 9 1788
-上瘾入骨i
-上瘾入骨i 2020-12-02 06:49

I want to achieve something like this:

def foo():
   try:
       raise IOError(\'Stuff \')
   except:
       raise

def bar(arg1):
    try:
       foo()
             


        
9条回答
  •  攒了一身酷
    2020-12-02 07:52

    In case you came here searching for a solution for Python 3 the manual says:

    When raising a new exception (rather than using a bare raise to re-raise the exception currently being handled), the implicit exception context can be supplemented with an explicit cause by using from with raise:

    raise new_exc from original_exc
    

    Example:

    try:
        return [permission() for permission in self.permission_classes]
    except TypeError as e:
        raise TypeError("Make sure your view's 'permission_classes' are iterable. "
                        "If you use '()' to generate a set with a single element "
                        "make sure that there is a comma behind the one (element,).") from e
    

    Which looks like this in the end:

    2017-09-06 16:50:14,797 [ERROR] django.request: Internal Server Error: /v1/sendEmail/
    Traceback (most recent call last):
    File "venv/lib/python3.4/site-packages/rest_framework/views.py", line 275, in get_permissions
        return [permission() for permission in self.permission_classes]
    TypeError: 'type' object is not iterable 
    
    The above exception was the direct cause of the following exception:
    
    Traceback (most recent call last):
        # Traceback removed...
    TypeError: Make sure your view's Permission_classes are iterable. If 
         you use parens () to generate a set with a single element make 
         sure that there is a (comma,) behind the one element.
    

    Turning a totally nondescript TypeError into a nice message with hints towards a solution without messing up the original Exception.

提交回复
热议问题