当在任何过程/函数/方法中调试某些代码时发生未处理的异常时,调试器会在那里停止并显示消息.
如果我现在继续逐步调试,执行将直接从创建异常的行跳转到当前过程的结尾(如果没有finally块).
继续使用当前程序的下一行是不是很好?
为什么跳转到proc的结尾并继续调用过程?这只是设计还是有充分的理由呢?
一个例外是意外情况,即停止处理的原因.
跳转到过程结束是一个不可见的finally语句,用于释放任何本地"已分配"的内存,如字符串,接口,记录等.
如果要处理异常,则必须封装可以使用try .. except语句提供异常的调用,并使用"on"子句仅处理要处理的特定异常.
在除外之外,您可以在调试器和代码中检查变量,如果需要,可以再次引发异常.
通常,未捕获的异常将在堆栈的每个函数中执行隐藏的"finally",因为它"展开"到异常处理程序.这会清除每个堆栈帧中的局部变量.在像C++这样的语言中,资源获取是初始化范例,它也会导致析构函数运行.
最终,在callstack的某个地方,异常将由处理程序捕获.如果没有明确的那个,系统提供的将终止进程,因为它还能合理地做什么?