诚心问各位~关于try catch和throw 的我问题
诚心诚意问各位高手。现在有这样的一个实际情况,
就是自己封装一些框架,接着表示成调用。
想问问以下两种情况,大家一般是怎么做的?
1、是底层(逻辑层)直接用try catch捕捉异常, 然后用 out string 的方法去获取异常信息, 表示层又再try catch 捕捉异常
(PS:本人发觉,用这种方法,表示层调用底层时又要先判断有没有异常再进行其他操作,代码量多很多~)
2、底层异常直接抛出,只在表示层try catch一次捕捉,显示给用户看。
(PS: 只捕捉一次异常,代码量少很多而且代码可读性强,但是会不会对程序有什么影响?)
大家比较推荐哪一种? 异常 try cath throw --------------------编程问答-------------------- 这个要看具体处理的吧, 一般都是结合用,如果只是需要展示给客户看,表现层直接捕获即可,但有些处理牵扯到资源释放什么的(如数据库连接),那就要在底层处理掉 --------------------编程问答-------------------- 个人意见第2种,因为第2种很简洁也符合逻辑,调用端接收到异常后,自己根据实际情况进行处理,比较好。 --------------------编程问答-------------------- 第二种才是王道 --------------------编程问答-------------------- 也许抛异常的时候可以先把异常归类下,要不用户也许不知道代码直接抛出来的玩意是什么意思 --------------------编程问答--------------------
看不懂这是什么意思。你是不是说,先自欺欺人地用string返回什么东西,然后再throw new exception?那么这是为了什么呢?
有时候我看到这类扯淡的代码
try
{
...
}
catch(ex Exception)
{
throw ex;
}
我实在是不知道这是干什么的。 --------------------编程问答-------------------- 一般第二种吧。资源释放什么的放在final里面就好了嗯。 --------------------编程问答--------------------
public int test(out strng errorMsg)
try{
}catch(Exception ex){
errorMsg = ex.Message;
}
我意思是用过out来显示错误信息~ --------------------编程问答-------------------- 有的应该吞的就吞了,不能吞的就吐出来。 --------------------编程问答-------------------- 推荐第二种,不要干这样的事情
public int test(out strng errorMsg)
try{
}catch(Exception ex){
errorMsg = ex.Message;
}
1.异常信息不完整,因为可能还有个Inner异常~
2.如果我用全局记录异常信息的地方(如Application_Error事件),或者用AOP,那么捕获不到了异常了~
另外,不要把异常信息给用户,就是最简单的“未将对象实例化”
也会吓坏到用户的 --------------------编程问答-------------------- 纯粹来学习的,我觉得异常不能给用户看,用户最多看看错误提示 --------------------编程问答-------------------- 对于楼主这种问题我直接是 在UI层写一个try-catch
然后在catch块里头写
{
ExceptionCheckEntity entity = ExceptionCheck.Check(ex);
}
然后把这个entity进行分析 是具体的没有权限 还是 钱不够 还是底层代码错误
然后进行显示 --------------------编程问答-------------------- 我做的东西 用户的每次请求 都会有try-catch的 --------------------编程问答--------------------
对于楼主这种问题我直接是 在UI层写一个try-catch
然后在catch块里头写
{
ExceptionCheckEntity entity = ExceptionCheck.Check(ex);
}
然后把这个entity进行分析 是具体的没有权限 还是 钱不够 还是底层代码错误
然后进行显示
嗯嗯~我也觉得是这样~但是公司却硬要在底层trycath一次 然后在UI层有再trycatch一次,如果调用底层cath出错弹出信息之后忘记return 的话 就直接继续执行下面的代码,这个应该是明眼人都看得出的是吧~
补充:.NET技术 , C#