如何处理异常的4个步骤常

iOS捕获异常,常用的异常处理方法
招聘信息:
前言:在开发APP时,我们通常都会需要捕获异常,防止应用程序突然的崩溃,防止给予用户不友好的体验。其实Objective-C的异常处理方法和JAVA的雷同,懂JAVA的朋友一看就懂。我为什么要写这篇博文呢?因为我发现百度上的介绍方法,很多都不是我想要的,而我想要的又说得不清楚,重点是大家都是直接复制别人的代码。。。于是不多说,大家往下看~~~以下程序已测试并通过:设备:iOS 8模拟器中开发工具:XCode6.1使用@try、catch捕获异常:以下是最简单的代码写法,其中@finally可以去掉:@try&{
&&&&//&可能会出现崩溃的代码
@catch&(NSException&*exception)&{
&&&&//&捕获到的异常exception
@finally&{
&&&&//&结果处理
}在这里举多一具比较详细的方法,抛出异常:@try&{
&&&&[self&tryTwo];
@catch&(NSException&*exception)&{
&&&&NSLog(@"%s\n%@",&__FUNCTION__,&exception);
//&&&&&&&&@throw&&//&这里不能再抛异常
@finally&{
&&&&NSLog(@"我一定会执行");
//&这里一定会执行
NSLog(@"try");tryTwo方法代码:-&(void)tryTwo
&&&&@try&{
&&&&&&&&//&5
&&&&&&&&NSString&*str&=&@"abc";
&&&&&&&&[str&substringFromIndex:111];&//&程序到这里会崩
&&&&@catch&(NSException&*exception)&{
&&&&&&&&//&6
//&&&&&&&&@throw&&//&抛出异常,即由上一级处理
&&&&&&&&//&7
&&&&&&&&NSLog(@"%s\n%@",&__FUNCTION__,&exception);
&&&&@finally&{
&&&&&&&&//&8
&&&&&&&&NSLog(@"tryTwo&-&我一定会执行");
&&&&//&如果抛出异常,那么这段代码则不会执行
&&&&NSLog(@"如果这里抛出异常,那么这段代码则不会执行");
}为了方便大家理解,我在这里再说明一下情况:如果6抛出异常,那么执行顺序为:1->5->6->8->3->4如果6没抛出异常,那么执行顺序为:1->5->7->8->9->3->42)部分情况的崩溃我们是无法避免的,就算是QQ也会有崩溃的时候。因此我们可以在程序崩溃之前做一些“动作”(收集错误信息),以下例子是把捕获到的异常发送至开发者的邮箱。AppDelegate.m-&(BOOL)application:(UIApplication&*)application&didFinishLaunchingWithOptions:(NSDictionary&*)launchOptions&{
&&&&//&Override&point&for&customization&after&application&launch.
&&&&NSSetUncaughtExceptionHandler(&UncaughtExceptionHandler);
&&&&return&YES;
void&UncaughtExceptionHandler(NSException&*exception)&{
&&&&&*&&获取异常崩溃信息
&&&&NSArray&*callStack&=&[exception&callStackSymbols];
&&&&NSString&*reason&=&[exception&reason];
&&&&NSString&*name&=&[exception&name];
&&&&NSString&*content&=&[NSString&stringWithFormat:@"========异常错误报告========\nname:%@\nreason:\n%@\ncallStackSymbols:\n%@",name,reason,[callStack&componentsJoinedByString:@"\n"]];
&&&&&*&&把异常崩溃信息发送至开发者邮件
&&&&NSMutableString&*mailUrl&=&[NSMutableString&string];
&&&&[mailUrl&appendString:@"mailto:"];
&&&&[mailUrl&appendString:@"?subject=程序异常崩溃,请配合发送异常报告,谢谢合作!"];
&&&&[mailUrl&appendFormat:@"&body=%@",&content];
&&&&//&打开地址
&&&&NSString&*mailPath&=&[mailUrl&stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
&&&&[[UIApplication&sharedApplication]&openURL:[NSURL&URLWithString:mailPath]];
微信扫一扫
订阅每日移动开发及APP推广热点资讯公众号:CocoaChina
您还没有登录!请或
点击量7130点击量3966点击量3934点击量3495点击量3469点击量3369点击量3176点击量3097点击量2857
&2016 Chukong Technologies,Inc.
京公网安备89在Java中,当你需要统一处理异常的时候,你是会选择catch (Exception),还是直接catch (Throwable)? Java的异常体系
Throwable: Java中所有异常和错误类的父类。只有这个类的实例(或者子类的实例)可以被虚拟机抛出或者被java的throw关键字抛出。同样,只有其或其子类可以出现在catch子句里面。
Error: Throwable的子类,表示严重的问题发生了,而且这种错误是不可恢复的。
Exception: Throwable的子类,应用程序应该要捕获其或其子类(RuntimeException例外),称为checked exception。比如:IOException, NoSuchMethodException…
RuntimeException: Exception的子类,运行时异常,程序可以不捕获,称为unchecked exception。比如:NullPointException. 应该catch什么
其实只要是Throwable和其子类都是可以throw和catch的,那么如果在需要统一处理异常的地方,我们应该catch (Throwable th) 还是 catch (Exception)呢?
这两种处理的区别在于,catch throwable会把Error和其他继承Throwable的类捕捉到。而catch Exception只会捕捉Exception极其子类,捕捉的范围更小。先不考虑有其他的类继承了Throwable的情况下(附录A),第一种catch相当于比第二种catch多捕捉了把Error和其子类。
那么究竟Error是否需要捕捉呢?JDK中Error类的的注释(如下)里提到过,Error是一种严重的问题,应用程序不应该捕捉它。
An Error is a subclass of Throwable that indicates serious problems that a reasonable application should not try to catch. Most such errors are abnormal conditions. The ThreadDeath error, though a “normal” condition, is also a subclass of Error because most applications should not try to catch it.
A method is not required to declare in its throws clause any subclasses of Error that might be thrown during the execution of the method but not caught, since these errors are abnormal conditions that should never occur.
Java Lanuage Spec 7 中也提到:Error继承自Throwable而不是继承自Exception,是为了方便程序可以使用 “catch (Exception)“来捕捉异常而不会把Error也捕捉在内,因为Exception发生后可以进行一些恢复工作的,但是Error发生后一般是不可恢复的。
The class Error is a separate subclass ofThrowable, distinct from Exception in the class hierarchy, to allow programs to use the idiom “} catch (Exception e) { & (&11.2.3) to catch all exceptions from which recovery may be possible without catching errors from which recovery is typically not possible.
已经不难看出,Java本身设计思路就是希望大家catch Exception就足够了,如果有Error发生,catch了也不会有什么作用(附录B)。 引申,如何设计异常体系?
如何设计异常体系要根据你的项目的情况,类库框架,应用程序的异常设计方式都会有一些区别。下面简单谈谈个人对异常设计的一些看法
类库/框架 继承RuntimeException扩展一个新的异常作为整个类库的异常基类。这个异常应该可以满足大部分类库对异常的要求。 在实现中,在任何需要捕捉checked exception的地方都会把异常统一转化成这个新的异常。 对于有特殊需求,需要自定义异常的,就通过继承这个基类来实现自定义异常。 不对异常记录log(交给上层来处理) 案例 fastjson
自定义异常比较多,不过都是继承自org.springframework.core.NestedRuntimeException,而这个异常也是继承自RuntimeException。
应用程序 设计上和框架异常类似,只是在捕捉checked exception的时候需要log 如果需要根据异常进行不同的处理,建议给自定义异常增加一个ERROR_CODE字段,这样无论在服务器还是客户端都可以根据不同的ERROR_CODE进行对应的处理。但是出现这种情况的时候,应该需要考虑一下设计思路了,一般来讲根据异常来决定业务流程不是一个好的设计方案。 附录A:是否应该直接继承Throwable来扩展新的异常?
个人认为异常都应该继承自Exception或者RuntimeException,而且Java本身对Exception和Error的规划就很清晰了,Java自己类库中没有异常是直接继承自Throwable的。 附录B:Error可以catch吗? 可以catch了后做些其他处理吗?
Error是可以catch的,而且也可以向常规Exception一样被处理,而且就算不捕捉的话也只是导致当前线程挂掉,其他线程还是可以正常运行,如果有需要的话捕捉Error之后也可以做些其他处理。但是Error是一种系统内部的错误,这种错误不像Exception一样是可能是程序和业务上的错误是可以恢复的。
假设进行网络连接操作的时候,IOException 发生了,可能是网络中断,我可以再尝试几次。
假设OutOfMemoryError发生了,就算被捕捉了,可以有什么手段让程序正常运行下去吗? 假设ExceptionInInitializerError发生了,类无法被正常初始化,这个是可以通过捕捉来恢复的吗?你好,很高兴能为你解决问题,一般来说在经期前后或者妊娠期,又或者排卵期,都是有可能白带增多的,这时比较常见的现象,这种的你是不需要太担心的。若是白带伴随着异味,这种的现象就是需要你能注意的,往往白带异常还会伴随着腰疼,经期不调或者经血增加或者伴着血块增大,这些都是常见的额症状,这时就需要你能及时观察自己了,有症状的话还能请你及时去正规的医院诊治一下。
步骤/方法:
1首先,你应该注意你平时的饮食了,你患有白带异常,本就不在应该吃一些辛辣刺激类的食物了,尤其是辣椒之类的,这对你的患处是没有好处的,应该多吃一些清淡易消化的食物,最好是流质类的或者半流质类的。
2其实,就是一般患有白带异常的女性平常是会服用一些抗生素的药物的,若是稍加觉得自己的病情加重,就自己加大药量,这种做法是非常不对的,因为一旦服用抗生素的药物太多,是可能造成你阴部环境的混乱的。
3最后,还请你及时及时观察自己的病情,有事没事不能自己撑着,要懂得找人帮助自己,一旦发现自己有什么不太对的情况还能及时找到正规的医院进行诊治,找到正规的额医生给你做治疗,并配合服用相应量的药物治愈病情。
注意事项:
现代的女性大多会选择现在的比较流行的丁字裤,但往往这种丁字裤对女性的身体是很不好的,也容易造成女性的妇科炎症的,所以建议你能选择那中棉质类的内裤。
订阅到邮箱
温馨提示:以上经验分享由网友原创,仅供参考,未经许可禁止转载,违者必究
白带异常热门相关
白带异常相关药品
功能主治:除淋球菌感染外,任何原因引起的白带增...
参考价格:¥46
功能主治:清热解毒,除湿止带。用于湿热带下,症...
参考价格:¥26.8
咨询实录推荐处理异常情况
processes the abnormal situation
处理异常情况
基于1个网页-
Geronimo 应用服务器的事务支持允许创建可以处理异常情况的基础设施。
Transactional support by the Geronimo application server allows creation of an infrastructure that can handle exceptional conditions.
这里没有处理异常情况,因为这仅仅是一个例子,不过发布的 Ajax 代码应该处理返回错误的请求。
I don't handle exception cases here, because it's just example code, but the Ajax code you ship should handle requests that return errors.
可以通过两种方式来处理异常情况:架构师可以对新的应用程序的体系结构强加一些限制和约束,使其遵循现有的体系结构构造。
Exceptions can be dealt with in two ways: The architects can impose limitations and constraints on the architecture of the new application so that it follows the existing architectural constructs.
So, summarizing better, assert is something you put in to say to the user, make sure you're giving me input of this type, but I'm going to guarantee you the rest of the code works correctly. Exceptions and exception handlers are saying, here are the odd cases that I might see and here's what I'd like to do in those cases in order to try and be able to deal with them.
所以更好的总结下,断言就是你放在那里告诉用户,保证你输入的是这种类型的,但我能保证剩下的代码运行正确,异常和异常处理做的事,这里有些我能预期的异常情况,并且这里有些情况,我能尝试处理。
$firstVoiceSent
- 来自原声例句
请问您想要如何调整此模块?
感谢您的反馈,我们会尽快进行适当修改!
请问您想要如何调整此模块?
感谢您的反馈,我们会尽快进行适当修改!苹果/安卓/wp
积分 6321, 距离下一级还需 3859 积分
权限: 自定义头衔, 签名中使用图片, 隐身, 设置帖子权限, 设置回复可见
道具: 彩虹炫, 涂鸦板, 雷达卡, 热点灯, 金钱卡, 显身卡, 匿名卡, 抢沙发, 提升卡, 沉默卡, 千斤顶, 变色卡下一级可获得
权限: 签名中使用代码
购买后可立即获得
权限: 隐身
道具: 金钱卡, 彩虹炫, 雷达卡, 热点灯, 涂鸦板
开心签到天数: 2 天连续签到: 2 天[LV.1]初来乍到
样本有164个国家,出现了一些异常值,比如某些小国GDP增长率会在一年之间下降50%,请问如何处理这些异常值?有没有做过异常值处理的文章可以推荐的,谢谢!
就像这个例子里这样。这个例子里假定最后一个观测值是异常的。第一个回归是包括异常值的。第二个回归包括dummy,但是结果和不包括异常值的第三个回归是一样的。
sysuse auto
reg price weight
gen i=_n==74
reg price weight i
reg price weight in 1/73
支持楼主:、
购买后,论坛将把您花费的资金全部奖励给楼主,以表示您对TA发好贴的支持
载入中......
shaoqinglong11 发表于
谢谢,请问如何设置DUMMY变量就像这个例子里这样。这个例子里假定最后一个观测值是异常的。第一个回归是包括异常值的。第二个回归包括dummy,但是结果和不包括异常值的第三个回归是一样的。
sysuse auto
reg price weight
gen i=_n==74
reg price weight i
reg price weight in 1/73
你要用这些数据干什么?你为什么觉得它们异常?判断是否需要处理以及如何处理都是需要具体问题具体分析的。
夏目贵志 发表于
你要用这些数据干什么?你为什么觉得它们异常?判断是否需要处理以及如何处理都是需要具体问题具体分析的。做成散点图有少数的确偏离的很远,导师说要处理,我只好从了
我们调查中处理异常值通常是因为可能有因为调查产生的误差,所以导致的异常值。但你那个对于国家的数据,应该是真实值来的吧,为什么是异常值?好比回归曲线那些,不能说离回归曲线远的那些就异常吧,最后显著就可以了。
热心帮助其他会员
总评分:&经验 + 5&
热心指数 + 1&
crysjia 发表于
我们调查中处理异常值通常是因为可能有因为调查产生的误差,所以导致的异常值。但你那个对于国家的数据,应 ...我也是和你一样的看法。但是导师是外行,又是我的领导,我能奈何,哎
shaoqinglong11 发表于
我也是和你一样的看法。但是导师是外行,又是我的领导,我能奈何,哎那要么就舍掉,不然加个dummy变相舍掉就是了
shaoqinglong11 发表于
我也是和你一样的看法。但是导师是外行,又是我的领导,我能奈何,哎最好好好跟导师或者其他老师交换下意见吧。无论你的题目多有创意,但是过程经不起推敲也会被别人质疑。
夏目贵志 发表于
那要么就舍掉,不然加个dummy变相舍掉就是了谢谢,请问如何设置DUMMY变量
crysjia 发表于
最好好好跟导师或者其他老师交换下意见吧。无论你的题目多有创意,但是过程经不起推敲也会被别人质疑。好的,我在尝试去沟通一下
无限扩大经管职场人脉圈!每天抽选10位免费名额,现在就扫& 论坛VIP& 贵宾会员& 可免费加入
加入我们,立即就学扫码下载「就学」app& Join us!& JoinLearn&
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
如有投资本站或合作意向,请联系(010-);
邮箱:service@pinggu.org
投诉或不良信息处理:(010-)
京ICP证090565号
京公网安备号
论坛法律顾问:王进律师

我要回帖

更多关于 生产现场异常处理 的文章

 

随机推荐