Questions tagged «error-handling»

与处理错误和异常有关的问题。根据Wikipedia的说法,异常处理是在计算过程中对异常(例如异常或需要特殊处理的异常事件)的发生做出响应的过程,通常会改变程序的正常执行流程。它是由专门的编程语言构造或计算机硬件机制提供的。

4
错误抑制不良做法吗?
在一个SO问题上,我在这里问了一些我不确定的代码,有人回答说:“ BTW,那里的代码很糟糕:它经常使用错误抑制符号(@)。” 有什么不好的做法吗?具有以下内容: $db=@new mysqli($db_info) or die('Database error'); ,它使我仅显示自定义错误消息。如果没有错误抑制,那么它将仍然显示以下典型的PHP消息: 警告:mysqli :: mysqli():php_network_getaddresses:getaddrinfo失败:此类主机未知。在一些\文件\路径上线6 以及“数据库错误”。 抑制错误总是不好的,如果是这样,那么上述问题到底是不好的? 更新:我正在使用的实际代码是: or error('Datatabase error', 'An error occurred with the database' . (($debug_mode) ? '<br />MySQL reported: <b>' . $db->error . '</b><br />Error occurred on line <b>' . __LINE__ . '</b> of <b>' . __FILE__ . '</b>' …

3
推荐一种设计模式/方法来暴露/容忍/从系统错误中恢复,异常处理(例如Java,C ++,Perl,PHP)
您能推荐一种设计模式/方法来暴露/容忍/从系统错误中恢复,异常处理(Java,C ++,Perl,PHP)吗? 一些错误需要报告。 某些错误可以在内部处理(通过重试或不重要的处理(可以忽略))。 您如何构造代码以捕获它们? 但是所有错误都需要记录。 有哪些最佳实践? 为了模拟它们能够完全测试受它们影响的组件? 适用于几种现代编程语言的一般非编程语言特定问题,但将欢迎使用Java,C ++,PHP和Perl进行模式,方法和哲学的示例说明。 (也在stackoverflow中问过:https : //stackoverflow.com/questions/7432596/recommend-a-design-pattern-approach-to-exposed-tolerating-recovering-from-system, 但我认为也应该在程序员中提出,因为我认为程序员的问答涵盖了更广泛的软件/编程问题,而stackoverflow则更多地是关于技术实现(IMHO)。

4
在PHP的魔术方法的上下文中,“ trigger_error”与“ throw Exception”
我正在与一位同事trigger_error就魔术方法上下文中的正确用法(如果有)进行辩论。首先,我认为除了这种情况外,trigger_error应该避免这种情况。 说我们有一类的方法 foo() class A { public function foo() { echo 'bar'; } } 现在说我们想提供完全相同的接口,但是使用魔术方法来捕获所有方法调用 class B { public function __call($method, $args) { switch (strtolower($method)) { case 'foo': echo 'bar'; break; } } } $a = new A; $b = new B; $a->foo(); //bar $b->foo(); //bar 这两个类的响应方式相同,foo()但在调用无效方法时有所不同。 $a->doesntexist(); //Error $b->doesntexist(); …

2
如何实现错误处理
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 6年前关闭。 即使我已经在专业水平上编程了几年,但我仍然不完全理解错误处理。尽管我的应用程序运行良好,但错误处理并未在专业级别上实现,而是多种技术的结合与匹配。 我的错误处理没有任何结构。我想学习和理解它是如何在专业水平上实现的。这是我缺乏知识的领域。 什么时候应该使用异常,什么时候应该返回成功状态,以在逻辑流程中进行检查?可以混合异常并返回状态吗? 我主要使用C#编写代码。


2
我应该如何处理记录器故障?
在公司的一些应用程序中,我们使用自定义记录器。它相当健壮,尽管将来我们可能会用NLog之类的东西来代替它。记录器的任务之一是记录应用程序中遇到的任何异常。 我一直担心的一个问题是,记录器中的异常处理允许出现静默故障。也就是说,如果未针对给定的异常编写日志(由于记录器中的错误),那么我应该如何处理该异常并(以某种方式)将异常记录到记录器本身中? 假设WriteLog函数引发异常。我应该尝试多次调用该函数还是直到不引发异常之前?我是否应该尝试使用记录器编写引发的异常(这很可能会导致异常完全消失……)?除了第一次实现自定义记录器时,我很幸运没有遇到这种情况。另一方面,我目前无法知道记录器是否未能记录应用程序异常(由于其自身的异常)。 我已经尝试过在线和在一些SE网站上进行搜索,但是到目前为止,由于所有帖子都处理记录器中的错误(但不记录潜在的异常以及如何记录它们)或记录器外部的异常,到目前为止,这种方法是徒劳的。

3
Python-断言与if和return
我正在编写一个对文本文件执行某些操作的脚本(尽管这样做与我的问题无关)。因此,在对文件执行某些操作之前,我想检查文件是否存在。我可以做到,没问题,但是问题更多是美学问题。 这是我的代码,以两种不同的方式实现同​​一件事。 def modify_file(filename): assert os.path.isfile(filename), 'file does NOT exist.' Traceback (most recent call last): File "clean_files.py", line 15, in <module> print(clean_file('tes3t.txt')) File "clean_files.py", line 8, in clean_file assert os.path.isfile(filename), 'file does NOT exist.' AssertionError: file does NOT exist. 要么: def modify_file(filename): if not os.path.isfile(filename): return 'file does NOT exist.' …

2
鲁棒性和容错能力有什么区别?
系统/程序/分布式算法/ ...通常以谓词鲁棒或容错来描述。 有什么区别? 细节: 当我用Google搜索+健壮的+“容错”功能时,我只有两次点击,都无济于事。 当我用谷歌搜索术语时,我发现很多论文的标题中都有两个术语。不幸的是,它们并没有精确地定义术语:(但是由于它们同时使用了这两个术语,因此似乎没有一个暗示另一个。

3
错误或错误作为第一个参数的不同回调?
几天前,我们(和JS SO聊天室)与@rlemon讨论了他的Little-XHR库有关错误处理的问题。 基本上,我们想确定应该使用哪种错误处理模式: xhr.get({ // Some parameters, and then success: function(data) {}, failure: function(data) {} }) 要么: xhr.get({ // Some parameters, and then callback: function(err, data) {} }) 一个更像jQuery,而另一个更像Node。有人说第一种模式使您更多地考虑处理错误。我认为相反,因为您可能会忘记其他回调函数,而参数始终位于第二个模式中。 关于这两种模式有什么意见/优势/缺点吗?

3
使用MVC时处理PHP中的错误
我最近一直在使用Codeigniter,但令我不安的是处理错误并将错误显示给用户。我从来没有擅长处理错误,而不会变得凌乱。我主要关心的是何时将错误返回给用户。 使用异常和抛出/捕获异常,而不是从函数返回0或1,然后使用if / else处理错误,是一种好习惯吗?因此,使得更容易通知用户该问题。 我倾向于避开例外。几年前,我在大学的Java导师告诉我:“不应在生产代码中使用异常,它应该更多地用于调试”。我感到他在撒谎。 但是,举例来说,我有将用户添加到数据库中的代码。在此过程中,可能有不止一件事情出错,例如数据库问题,重复条目,服务器问题等。注册期间发生问题时,用户需要了解它。 记住我正在使用MVC框架,是处理PHP错误的最佳方法是什么。

3
异常或错误代码
我们正在构建一个Web服务(SOAP,.Net),该服务将与(大多数)本地客户端(Windows,C ++)进行通信,并且我们想知道将错误传达给客户端的最佳方法是什么(例如,不提供登录服务的SomethingBadHappened或类似未找到用户的内容),并且无法决定是向客户端抛出异常还是使用某种错误代码模型来执行上述操作。 您希望在客户端上进行处理的是:接收错误代码或处理包含错误原因的ServerFault异常? 1)我们为什么想例外:因为它将使服务器端代码有很多更均匀 2)为什么我们都在思考错误代码:因为我们认为它使从客户端的角度更有意义。 如果2)确实是真的,我们可能会想使用错误代码而不是异常代码?是这样吗? 另外,如果我们与托管客户而不是本地客户进行交谈,答案是否会改变?

4
在错误消息中包括指向相关文档的链接?
我们创建了一个供外部开发人员使用的商业库和代码示例。我们有(封闭的,可供注册用户使用)文档,其中广泛解释了如何使用该库。 许多开发人员是首次使用,因此会遇到很多基本错误。 在错误日志中包含指向文档的链接是否合适?可能的不利之处是什么?我可以预见一些,但似乎有可能克服以下问题 文档URL已过期 最新文档中未反映的特定于版本的错误 还有其他问题,我们通过将开发人员发送给无关的文档来浪费开发人员的时间 在我的意思示例下面,添加粗体字是个好主意吗? [错误]无法在独立项目上执行目标org.apache.maven.plugins:maven-archetype-plugin:1.2.3:generate(default-cli):所需的原型不存在(com.example.library。 archetypes:library-archetype-blank:1.2.3.0)->请参阅http://example.com/docs/setting-up-an-archetype了解更多信息和可能的故障排除

6
设计与数据库相关的方法,最好返回:true / false或受影响的行?
我有一些方法可以在数据库中执行某些数据更改(插入,更新和删除)。在ORM我使用这些类型的方法返回行INT影响值。我应该为“我的方法”返回什么,以指示操作的成功/失败状态? 考虑返回一个代码int: A.1 public int myLowerLevelMethod(int id) { ... int affectedRows = myOrm.deleteById(id) ... return affectedRows; } 然后用法: A2 public void myOtherMethod() { ... int affectedRows = myLowerLevelMethod(id) if(affectedRows > 0) { // Success } else { // Fail } } 与使用boolean相比: B.1 public boolean myLowerLevelMethod(int id) { ... int …

5
检查与未检查与异常……相反信念的最佳实践
系统正确传达和处理异常有很多要求。还有多种语言可供选择以实现这一概念。 例外要求(无特定顺序): 文档:一种语言应具有文档API可能引发的异常的含义。理想情况下,此文档介质应可在机器上使用,以允许编译器和IDE为程序员提供支持。 传输异常情况:显然,这允许功能传达阻止被调用功能执行预期动作的情况。我认为这类情况分为三大类: 2.1代码中的错误导致某些数据无效。 2.2配置或其他外部资源问题。 2.3本质上不可靠的资源(网络,文件系统,数据库,最终用户等)。这些有点极端,因为它们不可靠的本性应该让我们期待它们的零星失败。在这种情况下,是否将这些情况视为例外? 为代码提供足够的信息来处理它:异常应向被调用者提供足够的信息,以便被调用者可以做出反应并可能处理这种情况。这些信息也应该足够,以便在记录该异常时将为程序员提供足够的上下文,以识别和隔离有问题的语句并提供解决方案。 向程序员提供有关其代码执行状态的当前状态的信心:软件系统的异常处理能力应足够强,以提供所需的防护措施,同时又不影响程序员,因此他可以专注于执行以下任务:手。 为涵盖这些内容,以下方法已以多种语言实现: 受检查的异常 提供了记录异常的好方法,并且从理论上讲,如果正确实施,应该可以确保一切都很好。但是,这样做的代价是,许多人认为通过吞下异常或将它们作为未检查的异常重新抛出来绕过它更具生产力。如果使用了不适当的检查异常,则几乎失去了它的全部用处。同样,检查异常使创建时间稳定的API变得困难。在特定域内实现通用系统将带来特殊情况的负担,这些特殊情况将变得难以使用单独检查的异常来维护。 未检查的异常 -比检查的异常通用得多,它们无法正确记录给定实现的可能异常情况。他们完全依赖临时文档。这就造成了一种情况,即介质的不可靠特性被提供可靠性外观的API所掩盖。同样,当抛出这些异常时,它们会在抽象层中向上移动,从而失去其含义。由于它们的文献记录不充分,因此程序员无法专门针对它们,并且经常需要投放比必要范围更广的网络,以确保辅助系统(如果发生故障)不会导致整个系统崩溃。这使我们又回到了吞咽问题检查提供的异常。 多状态返回类型 在这里,它依赖于不相交的集合,元组或其他类似的概念来返回预期结果或代表异常的对象。这里没有堆栈展开,没有代码切入,一切正常执行,但是必须在继续之前验证返回值是否存在错误。我还没有真正使用它,因此无法从经验中发表评论,我承认它解决了绕过正常流程的异常的一些问题,但是仍然会遇到与已检查的异常几乎相同的问题,既麻烦又不断地“面对您”。 所以问题是: 您在这方面的经验是什么?根据您的看法,您是为语言提供良好的异常处理系统的最佳人选? 编辑:写完这个问题后几分钟,我遇到了这个帖子,怪异的!

2
我们需要验证整个模块的使用情况还是仅验证公共方法的参数?
我听说建议您验证公共方法的参数: 如果他不期望为空,是否应该检查为空? 方法是否应验证其参数? MSDN-CA1062:验证公共方法的参数(我具有.NET背景,但问题不是特定于C#的) 动机是可以理解的。如果将以错误的方式使用模块,则我们希望立即引发异常,而不是任何不可预测的行为。 令我困扰的是,错误的参数并不是使用模块时唯一的错误。这是一些错误情况,如果我们遵循建议并且不希望错误升级,则需要添加检查逻辑: 来电-意外参数 来电-模块处于错误状态 外部通话-返回意外结果 外部调用-意外的副作用(两次进入调用模块,破坏了其他依赖状态) 我试图考虑所有这些情况,并用一种​​方法(对不起,不是C#的人)编写一个简单的模块: public sealed class Room { private readonly IDoorFactory _doorFactory; private bool _entered; private IDoor _door; public Room(IDoorFactory doorFactory) { if (doorFactory == null) throw new ArgumentNullException("doorFactory"); _doorFactory = doorFactory; } public void Open() { if (_door != null) throw …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.