Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中,即使捕获到异常,也可以跟踪引发的异常吗?_Python_Django_Exception Handling - Fatal编程技术网

在python中,即使捕获到异常,也可以跟踪引发的异常吗?

在python中,即使捕获到异常,也可以跟踪引发的异常吗?,python,django,exception-handling,Python,Django,Exception Handling,我有一个讨厌的bug,如果不通读django中的整个模型表单逻辑,我就无法解决它: 基本上,在django模型表单流程中,代码引发了ValidationError,然后在表单流程中捕获并显示错误消息 即使在程序内部处理了特定类型的异常,也可以跟踪引发的异常吗 例如: 在一个大的代码库中的一个文件,在这个文件的某个地方引发了一个异常,并且被捕获,我不知道这个文件在哪里以及哪一行 1 def process_form(): 2 ...logic... 3 raise ValudationErr

我有一个讨厌的bug,如果不通读django中的整个模型表单逻辑,我就无法解决它:

基本上,在django模型表单流程中,代码引发了ValidationError,然后在表单流程中捕获并显示错误消息

即使在程序内部处理了特定类型的异常,也可以跟踪引发的异常吗

例如:

在一个大的代码库中的一个文件,在这个文件的某个地方引发了一个异常,并且被捕获,我不知道这个文件在哪里以及哪一行

1 def process_form():
2  ...logic...
3  raise ValudationError()
4  ...logic...
5  except ValudationError:
6    ...handle...
一些工具向我展示了:
第3行中提出的ValudationError

我想我已经找到了一种方法,至少这是一种解决方法,即转到ValidationError的定义,并在
\uuuu init\uuu
方法中打印stacktrace:

class ValidationError(Exception):
    """An error while validating data."""
    def __init__(self, message, code=None, params=None):
        import traceback
        print traceback.print_exc()

是的,可以这样做:

 def process_form():
  ...logic...
  raise ValudationError()
  ...logic...
  except ValudationError as e:
      print e        ### 'e' will be an object of Exception raised
      import traceback
      print traceback.print_exc()
  ...handle...
except (ValudationError, AttributeError) as e:
对于多个异常,如下所示:

 def process_form():
  ...logic...
  raise ValudationError()
  ...logic...
  except ValudationError as e:
      print e        ### 'e' will be an object of Exception raised
      import traceback
      print traceback.print_exc()
  ...handle...
except (ValudationError, AttributeError) as e:

欲了解更多信息,请阅读此

谢谢您的尝试,但我的问题是我不知道它在哪里引发并被抓获。您的回答假设我知道在哪里放置
打印回溯。print_exc()
,但如果我知道该行的确切位置,我的帖子无效。就我所能理解的问题而言,您有一个包含多个异常处理程序的大型代码库。。正确的?但是,您不确定实际在哪里处理异常。如果在代码库中使用适当的日志记录,问题就可以得到解决,即每个异常处理程序都只提供一条有意义的完整日志消息,这样当您看到服务器日志时,就可以识别处理异常的点。此外,您可以尝试一些工具,例如帮助跟踪异常的Sentry。创建异常对象并不一定意味着也会引发异常。它也可能是在以后的决策过程中创建和参与的。这种情况并不经常发生,但有时会发生。