当前位置:编程学习 > C#/ASP.NET >>

throw抛出异常又怎么样?应用程序还是中断了,throw到底怎么理解?

--------------------编程问答-------------------- 你怎么在已经捕获到异常,并准备进行相关处理的时候,还throw抛出异常的?throw抛出异常应该是前面抛出,catch里面应该是写处理异常的语句。。。 --------------------编程问答-------------------- catch了,又throw,跟没catch有什么区别。
除非在TestExceptionFunction的调用的地方再catch一遍。 --------------------编程问答--------------------
            int i = 10;
            int j = 0;
            double vaule = 0.0;
            try
            {
                vaule = i / j;
            }
            catch (Exception e)
            {
                
                //throw 就是抛出异常,程序会在抛出后挂掉

                //改为以下,不会挂掉
                Console.WriteLine(e.Message);//e.ToString()
            }
            finally
            {
                Console.WriteLine("程序执行的出口");
            }
            Console.WriteLine("the value is {0}", vaule);
--------------------编程问答-------------------- 既然throw了,你应该在外面去捕获这个异常。
如果你没有进行捕获处理,那么系统帮你处理。 --------------------编程问答-------------------- throw是抛出异常,需要你去处理这个异常,你不处理系统帮你,就中断了。 --------------------编程问答-------------------- int i = 10;
            int j = 0;
            double vaule = 0.0;
            try
            {
                vaule = i / j;
            }
            catch (Exception e)
            {
                
                //throw 就是抛出异常,程序会在抛出后挂掉

                //改为以下,不会挂掉
                
(e.Message);//e.ToString()
            }
            finally
            {
                Console.WriteLine("程序执行的出口");
            }
            Console.WriteLine("the value is {0}", vaule);
--------------------编程问答--------------------

private void BuyProduct(Int32 productId)
{
   try
   {

   }
   catch(ArgumentException ex)
   { 
        throw new Exception(String.Format("在购买产品{0}的时候出错",productId),ex); //重新抛出,加一些有用的信息。
   }
   catch(SqlException ex) 
   {
        RefundProduct(productId); //退货,进行逆操作,实际中应该是用事务恢复,这里只是举个例子,说明catch块中,可以作一些恢复性工作
   }
}
--------------------编程问答-------------------- throw不中断程序还要他干嘛呢 --------------------编程问答-------------------- 捕获异常,不是让你仅仅throw用的。
http://www.cnblogs.com/luminji/archive/2010/10/20/1823536.html --------------------编程问答-------------------- 在外面一层的catch中处理 --------------------编程问答-------------------- 把throw e;删除即可。
你不处理异常情况,只需在把catch里的内容清空就行。

public static  void TestExceptionFunction()
        {
            int i = 10;
            int j = 0;
            double vaule = 0.0;
            try
            {
                vaule = i / j;
            }
            catch (Exception e)
            {

               // throw e;//再怎么处理异常,程序还是会“断”执行不下去,到底怎么理解throw,            }
            finally
            {
                Console.WriteLine("程序执行的出口");
            }
            Console.WriteLine("the value is {0}", vaule);
        }

--------------------编程问答-------------------- 楼主把try。。。catch。throw好好看看。看看他们到底用来做什么的!
try捕捉异常。catch人为自己处理异常比如你知道被除数不能为零假如为零了你就要在这里面处理了。throw叫主机处理异常,程序会中断一般不用。 --------------------编程问答-------------------- 你catch就是其他代码throw的异常。你什么都不做又抛一遍当然就交给系统了,程序就挂了呗。自己只throw不处理的情况,一般只在当你也搞不清异常是如何产生的,会不会产生,并且异常出现时不进行处理会导致比程序挂了更惨的事发生(比如数据一致性错误)的情况下,直接抛出,让程序完蛋了事。 --------------------编程问答-------------------- 楼主把try。。。catch。throw好好看看。看看他们到底用来做什么的!
try捕捉异常。catch人为自己处理异常比如你知道被除数不能为零假如为零了你就要在这里面处理了。throw叫主机处理异常,程序会中断一般不用。 --------------------编程问答-------------------- 楼主,这就好比你把异常吃了,又吐出来了
--------------------编程问答-------------------- 在try中抛出异常,不处理,系统可能会帮你进行些处理,catch中是抛出后,你可以进行异常处理,finally是释放资源等操作 --------------------编程问答--------------------
引用 3 楼 sprc_lcl 的回复:
C# code
            int i = 10;
            int j = 0;
            double vaule = 0.0;
            try
            {
                vaule = i / j;
            }
            catch (Exception e……


应用程序中怎么写,Console.WriteLine()在这里确实使程序继续跑下去了,控制台中也看到了,比如在具体一个web项目中,一个窗体项目中类似的问题怎么处理? --------------------编程问答--------------------
引用 5 楼 anbin0814 的回复:
throw是抛出异常,需要你去处理这个异常,你不处理系统帮你,就中断了。


+1 --------------------编程问答--------------------
引用 13 楼 hwbox 的回复:
你catch就是其他代码throw的异常。你什么都不做又抛一遍当然就交给系统了,程序就挂了呗。自己只throw不处理的情况,一般只在当你也搞不清异常是如何产生的,会不会产生,并且异常出现时不进行处理会导致比程序挂了更惨的事发生(比如数据一致性错误)的情况下,直接抛出,让程序完蛋了事。


非常感谢,醍醐灌顶 --------------------编程问答--------------------
引用 19 楼 x_4653 的回复:
引用 13 楼 hwbox 的回复:
你catch就是其他代码throw的异常。你什么都不做又抛一遍当然就交给系统了,程序就挂了呗。自己只throw不处理的情况,一般只在当你也搞不清异常是如何产生的,会不会产生,并且异常出现时不进行处理会导致比程序挂了更惨的事发生(比如数据一致性错误)的情况下,直接抛出,让程序完蛋了事。


非常感谢,醍醐灌顶,但我见过的异常处理从来就是throw e完事。


但我见过的异常处理从来就是throw e完事。
--------------------编程问答-------------------- 这是你写程序的问题,如果你不try得话就直接崩溃了。。。 --------------------编程问答-------------------- 抛出了异常,然后总得有东西接住~

楼主看过的throw e的例子后面应该有接一些处理的语句的,最简单的应该是一些打印错误报告之类的~ --------------------编程问答-------------------- 谈谈自己使用的体会:
try{}使用的目的是把异常限制在一定范围内,并不致于继续蔓延,引起更大范围的异常。
就象抓一个罪犯,危害最小的方式 是在现场抓到它。

throw方式抛出异常时,往往用在没有足够手段向调用它的过程提供有效的不合逻辑的信息时采用。
如:C#调用 了C++的dll
很多情况下,你不可能给每个函数都加个参数(成功或失败,和错误信息)。
--------------------编程问答-------------------- 当你知道怎么处理exception的时候 比方加一些有用的上下文信息,log,notify 才做catch
如果什么都不做,你就不要catch了,由上层调用代码来处理。上层可能知道怎么处理,比方它可以把不成功的代码再执行一遍,等等。。。你这个例子可能有个全局的exception handling strategy
--------------------编程问答-------------------- Console.WriteLine(e.Message)   直接输出进行处理 --------------------编程问答-------------------- 原来我依然是菜鸟!!! --------------------编程问答--------------------
引用 7 楼 bclz_vs 的回复:
C# code

private void BuyProduct(Int32 productId)
{
   try
   {

   }
   catch(ArgumentException ex)
   { 
        throw new Exception(String.Format("在购买产品{0}的时候出错",productId),ex); //重新抛出,加一……


这里第二个catch仍然要仿照第一个,在取消交易之后,封装原来的异常为新的自定义异常,然后继续抛出。 --------------------编程问答--------------------
引用 3 楼 sprc_lcl 的回复:
C# code
            int i = 10;
            int j = 0;
            double vaule = 0.0;
            try
            {
                vaule = i / j;
            }
            catch (Exception e……


当程序异常时仅仅console.write之后(何况winform、webform之类的会忽略console.write)就让程序伪装成正常结束了,这种程序谁还敢用、还能维护它?

当一个系统彻底混乱了,怎么查原因?因为底层有人命名异常了却装的没事人一样地隐藏了异常断点,这就无法调试软件bug了。 --------------------编程问答--------------------
引用 11 楼 zerodegrees 的回复:
把throw e;删除即可。
你不处理异常情况,只需在把catch里的内容清空就行。

C# code

public static  void TestExceptionFunction()
        {
            int i = 10;
            int j = 0;
            double vaule = 0.0;
    ……


比如你一个程序中间某条语句调用TestExceptionFunction,那么它异常了,你的程序毫不知情地去执行这条语句的下一条语句? --------------------编程问答-------------------- 拜读了,在团队开发中,保持良好的抛出异常的习惯 --------------------编程问答-------------------- 但抛出异常之后,怎么让外面调用的函数停止?
比如我这里有个函数

try{
执行一系列操作}
catch
{
   异常处理了
}
执行一系列后续操作

怎么终止掉后续操作?
如果我的try是在一个函数里,那我怎么终止掉函数被调用地方的后续操作? --------------------编程问答-------------------- 在catch 写处理 --------------------编程问答-------------------- 学习了、、 --------------------编程问答-------------------- 跟队学习
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,