112233445511亚里士多德的错误观点误

两车发生交通事故,轿车内3名志愿者受伤。
两位老人走了40000公里,正好和地球赤道周长差不多。
声明:本文由入驻搜狐公众平台的作者撰写,除搜狐官方账号外,观点仅代表作者本人,不代表搜狐立场。
  这是关于的故事。如果你相信墨菲定律,那么任何事情都可能出错,不,一定会出错!这篇文章中我们来看下Java中的出错处理。文章会覆盖异常处理使用的正反例,然后看下ajax的异步处理。
  Java的事件驱动机制让Java更加丰富,浏览器好比就是一个事件驱动的机器,错误也是一种事件。当一个错误发生时,一个事件就在某个点抛出。理论上,有人会说错误是Java中的简单事件。如果你觉得是这样,那你就要好好去看看了。另外这篇文章只关注浏览器端的Java的情况。
  这篇文章将在《ExceptionalException Handling in Java》这篇文章的概念基础上进行解释。解释起来就是,当发生错误时,Java会去调用栈检查异常事件。如果你对此不熟悉建议先去看看基础的东西。我们的目的是探索处理异常的必要性,接下来你会看到一个try...catch 块语句,你要认真思考。
  例子的代码在github上,而且最终展示成这样:
  所有的按钮点击是都会触发”炸弹”,这个炸弹模拟了一个抛出的TypeError 异常。下面是这个模块单元测试的定义:
  开始时,这个函数定义了一个空的对象foo,注意bar() 没有在任何地方定义,我们用一个测试用例来看下它是如何引爆炸弹的。
  这个单元测试是用mocha 和should.js 写的。mocha 是一个测试框架,should.js 是一个断言库。如果你熟悉它们后,你会感觉写起来很爽。测试一般使用it('deion') 开始,然后在should 中使用` pass/fail` 结束。好消息是测试用例可以在node端运行而不需要浏览器。我建议多关注这些测试,因为它们能帮助我们提升代码的质量。
  正如所显示的,error() 定义了一个空的对象,然后尝试访问一个方法,因为bar() 方法在对象中不存在而会抛出一个异常。使用Java这种动态语言运行一定会出错。
  错误的方式
  对于一些错误的处理,我从按钮的而事件中抽离出异常处理的方式,下面是单元测试函数的代码:
  这个处理函数接收一个fn 回调函数作为输入,这个函数然后在处理器函数里面被调用,单元测试如下:
  如你所见,这个糟糕的处理函数如果有地方出错就会返回null,回调函数fn() 可以指向一个正确的方法或者一个异常,下面的点击处理函数会显示最终的处理结果。
  可恶的是,这里返回了一个null,当我想找哪里出了问题时整个人都蒙逼了。这种失败沉默的方式会影响用户体验和数据混乱。更令人崩溃的是,我花了几个小时来进行debugg,但却没有使用try-catch,这个糟糕的处理函数吞没了错误并认为它没有问题,这样继续执行下去不会降低代码质量,但是隐藏的错误未来会让你花几个小时来debugg。在一个多层的深调用时,基本上不可能发现哪里出了问题。而在这些少数的地方使用try-catch 是正确的。但是一旦进入错误处理函数,就比较糟糕了。
  失败沉默策略会让你不容易发现错误所在,Java提供了一个更优雅的方式来处理这些问题。
  比较差的方式
  继续,是时候说下一个稍微好点的方法了。我先跳过事件绑定到dom上的部分。这个函数处理和刚刚我们看到的没什么不同。所不同的是单元测试中它处理异常的方式。
  这里定义在原来的基础上改进了。这里异常事件在调用栈中进行冒泡,我喜欢的是现在错误现在会离开方便debugg的调用栈。在这个异常中,解释器会遍历整个栈寻找另一个错误处理函数。这样就可以有机会在调用栈的顶端处理这些错误。不幸的是,因为这个方法,我不知道错误是从哪个地方抛出来的。所以我又得反向遍历这个栈找到错误异常的源头。但至少我知道某个地方出错了,并能找到是哪个地方抛出的错误。
  离开调用栈
  所以,一个抛出异常处理的方法是直接调用栈的顶端使用try-catch,就像:
  但是,记住我说的浏览器是事件驱动的。是的,Java中的错误也不过是一个事件。解释器在当前的执行上下文中执行后释放。结果是,我们可以利用一个 的全局异常事件处理函数,它大概是这样的:
  这个处理函数能捕获任何执行上下文中的错误异常。包括任何类型的任何错误。而且它能定位到代码中的错误处理。就像其它任何事件一样,你能捕获特定错误的具体信息。这样能使异常处理器只专注于一件事情,如果你允许这样做的话。这些处理函数也可以在任何时候注册,解释器会尽可能的遍历更多的处理函数,我们再也不用使用try-catch 块这种带有瑕疵的debug方式了。尤其是在对待像Java这类事件驱动机制的语言时,的优势就更大了
  现在我们可以使用全局处理函数来离开栈了,我们可以用来干什么呢。毕竟,调用栈还是存在的。
  捕获栈信息
  调用栈在定位问题时超级有用。好消息是,浏览器提供了这个信息。理所当然,查看错误异常中的栈属性不是标准的一部分,但是只在新的浏览器中可以使用。所以,你就可以这样来把错误日志发送给服务器了。
  可能从代码样例来说不是很明显,但是上面的代码一定会出错。上面提到了,每个处理函数都只处理一个功能。我关心的是这些信息是怎样被服务器捕获的。如下:
  这些信息来自FireFox 46的开发版本,通过一个正确的错误处理函数,记录了出错的情况。这里没必要隐藏错误,我可以看到什么地方出现的什么错误。这样代码debugg就很爽了。这些信息也可以保存在持续化缓存中以便于以后分析。
  调用栈对于debugg来说是很有用的,永远不要低估调用栈的力量。
  异步处理
  处理异步时,Java的异步处理代码不在当前的指向上下文中,这意味着try-catch 语句会有问题(不能捕获到异常):
  单元测试的结果如下:
  我必须用promise包含这个处理器来获取这个错误。注意的是,一个未被处理的异常发生时,尽管我将代码使用try-catch 包含起来了,是的,try-catch 只能在单一的作用域内有效。在一个异常被抛出的同时,解释器就会从try-catch 中离开,ajax也是一样的。所以有两种选择,一种是在异步调用里面捕获异常:
  这种方法很有效,但是很多地方可以改进。首先,try-catch 块在这里用很混乱。实际上,之前是这么做的,但是有问题。另外,V8引擎不鼓励在函数中使用try-catch(V8是chrome和nodejs中的Java引擎)。它们的建议是最外层写这些块。
  所以我们该怎么办?我说过全局异常处理可以在任何执行上下文中执行,如果给window对象增加一个错误处理函数,就OK了。这样是不是既能处理捕获处理错误又能保持代码的优雅呢。全局的错误处理能让你的代码干净整洁。
  下面是服务器收集到的错误日志,注意的是如果你使用同样的代码再不同浏览器上执行,你会看到收集到的日志也是不同的:
  这个处理函数甚至告诉我们错误是从异步代码中抛出的吗,它告诉我们来至setTimeout() 函数。
  总得来说,进行异常处理至少有两种方法。一个是失败沉默的方法,在错误发生时忽略错误不作为而不影响后面的继续执行。另一种是发生后迅速找到错误发生的地方。明显我们知道那种方法更具有优势。我的选择是:不要隐藏错误。没人会因为你代码中有问题而鄙视你,用户多试一次是可以接受的。代码距离完美是很远的,错误也是不可避免的,重要的是你发现错误后会怎么做。
  译者注:文章浅显的分析了错误处理的方式和一些正反案例,其实处理错误的最终目的还是提供前端代码的质量,关于错误处理上报可以参考下badjs的思路,基于现代前端开发模块化的基础,使用全局 和try-catch 相结合的方式更能有效进行错误定位。
  原文作者:Camilo Reyes
  原译:ouven
  原文地址: /proper-error-handling-java/
  想要跟着大牛老师学习,可以直接参加或者观看哟。
欢迎举报抄袭、转载、暴力***及含有欺诈和虚假信息的不良文章。
请先登录再操作
请先登录再操作
微信扫一扫分享至朋友圈
搜狐公众平台官方账号
生活时尚&搭配博主 /生活时尚自媒体 /时尚类书籍作者
搜狐网教育频道官方账号
全球最大华文占星网站-专业研究星座命理及测算服务机构
国内专业的IT职业教育机构,同时也是国内首个将IT教育分为...
主演:黄晓明/陈乔恩/乔任梁/谢君豪/吕佳容/戚迹
主演:陈晓/陈妍希/张馨予/杨明娜/毛晓彤/孙耀琦
主演:陈键锋/李依晓/张迪/郑亦桐/张明明/何彦霓
主演:尚格·云顿/乔·弗拉尼甘/Bianca Bree
主演:艾斯·库珀/ 查宁·塔图姆/ 乔纳·希尔
baby14岁写真曝光
李冰冰向成龙撒娇争宠
李湘遭闺蜜曝光旧爱
美女模特教老板走秀
曝搬砖男神奇葩择偶观
柳岩被迫成赚钱工具
大屁小P虐心恋
匆匆那年大结局
乔杉遭粉丝骚扰
男闺蜜的尴尬***
******:86-10-
***邮箱:错误的***
Wrong answer
但如果出现任何其他字节错误,如大小写不匹配、小数点后数字位数不够或太多、多余换行等,均被视为 错误的*** ( Wrong Answer )。
基于10个网页-
that is wrong answer
that is wrong answer
一个错误的***,那么为什么?
OK, why is that the wrong answer?
我感觉这是一个完全错误的***。
I feel this is entirely the wrong answer.
你需要去记住这些,不然你将会得到错误的***!
You need to remember this or you will often get the wrong answer!
Let's talk to the Beta' let me just emphasize at this stage there are no wrong answers.
我们先来讨论一下选β的理由,我要强调一下这里没有错误的***
So my answer is always going to be zero and therefore almost always going to be wrong. Yeah?
所以我的***总会是,因此,几乎这总是错误的,对不?
So, let's consider some people got it wrong, however, and let's see where that wrong answer might have come from, or actually, more importantly, let's see how we can all get to the correct answer.
我们来考虑一下为什么有些人做错了,然而我们来看看,这个错误的***从何而来,或者事实上更重要的,我们来看看怎样才能都得到正确***。
$firstVoiceSent
- 来自原声例句
请问您想要如何调整此模块?
感谢您的反馈,我们会尽快进行适当修改!
请问您想要如何调整此模块?
感谢您的反馈,我们会尽快进行适当修改!您的位置: >
面对错误的名言
  1、错误并非总是意味着无知,知识并非总是召之即来。&&塞&约翰逊
  2、错误常常是正确的先导。&&***
  3、错误经不起失败,但是真理却不怕失败。&&泰戈尔
  4、当失败不可避免时,失败也是伟大的。&&惠特曼
  5、对不屈不饶的人来说没有失败这回事。&&俾斯麦
  6、多数人的失败,都始于怀疑他们自己在想做的事情上的能力。&&司各特
  7、凡百事之成也在敬之,其败也必在慢之。&&司马光
  8、没有错误的推论我们就无法推论。&&利希滕伯格
  9、没有多次失败,难得一次成功。&&谚语
  10、每个人都有错,但只有愚者才会执迷不悟。&&意大利
  11、人的聪明和自己的明智及道路的选择,往往在失败以后。&&贾曦光
  12、人人须日日改过,一旦无过可改,即一日无步可过矣。&&陶觉
  13、人要学会走路,也得学会摔跤,而且只有经过摔跤才能不会走路。&&德国
  14、失败的教训,成功获经验。&&谚语
  15、失败是坚忍的最后考验。&&俾斯麦
  16、失败之前无所谓高手,在失败的面前,谁都是凡人。&&普希金
  17、十九次失败,到第二十次获得成功,这叫坚持。&&佚名
  18、什么叫做失败,失败是到达较佳境地的第一步。&&菲里普斯
  19、所有的科学都是错误先真理而生,错误在先比错误在后好。&&沃尔波斯
  20、为伟大的事业捐躯,从来就不能算做失败。&&乔。拜伦
  21、我的那些最重要的发现是受到失败的启发而获得的。&&戴维
  22、我们从失败中学到的东西要比在成功中学到的东西多得多。&&斯迈尔斯
  23、心中醒,口中说,纸上作,不从身上习过,皆无用也。&&颜元
  24、许多赛跑的人失败,都是失败在最后几步。&&苏格拉底
  25、夜觉晓非,今悔昨失。&&颜之推《颜氏家训》
  26、一次失败,只能证明我们成功的决心还不够。&&博维
  27、一次小小的失误也许会防止重重的跌落。&&托&富勒
  28、一个人的失败,是他自己的直接结果。&&詹姆斯&艾伦
  29、一个人在科学探索的道路上,走过弯路,犯过错误,并不是坏事,更不是什么耻辱,要在实践中勇于承认和改正错误。&&爱因斯坦
  30、一个人知道了自己的短处,能够改过自新,就是有福的。&&莎士比亚《无事生非》
  31、因为害怕失败而不敢放手一搏,永远不会成功。&&MRMY
  32、永不做错事的人,往往不能做出任何事情来。&&法国
  33、永远不要因承认错误而感到羞耻,因为承认错误也可以解释作你今天更聪敏。&&马罗
  34、这世界除了心理上的失败,实际上并不存在什么失败,只要不是一败涂地,你一定会取得胜利的。&&亨&奥斯汀
  35、只有永远躺在泥坑里的人,才不会再掉进坑里。&&黑格尔
  36、终身不病的人不能成个名医。&&阿拉伯
  37、从错误中学到的东西,比从美德中学到的东西往往还要多。&&美国
  38、不论成功或失败,都系于自己。&&朗费罗
  39、不会从失败中找寻教训的人,他们的成功之路是遥远的。&&拿破仑
如果您喜欢《面对错误的名言》记得分享给更多好友噢!
与面对错误的名言相关的文章错误地英文怎么说?除了falsely 和 mistakenly还能怎么说啊要副词哦~~~~~~~下面说的很多形容词好象没法变成副词
黑岩射手丶Je55
错误地基本翻译by errorfalselyin errormistakenly网络释义错误地:by mistake|in error|mistakenly错误地引用:misquote错误地配置:misconfigure
为您推荐:
其他类似问题
mistakenly或是wrongly
wrongly,in error,for error
incorrectly
最简单的:wrong
improper还有诸如:
inaccurate(比较专业的一个)
wrongly常见
扫描下载二维码

参考资料

 

随机推荐