Questions tagged «exception-handling»

异常是一种异常情况,需要偏离程序的正常流程。通常,异常不应导致完全失败,而应由异常处理程序来处理。异常处理是许多编程语言中的内置构造。通常,通过展开堆栈来处理异常,从而回滚到异常范围之外的已定义状态,然后调用处理程序块或例程。

4
PHP中的“ OR OR DIE()”如何工作?
我正在写一个php应用程序来访问MySQL数据库,在一个教程中,它说的是某种形式 mysql_connect($host, $user, $pass) or die("could not connect"); PHP如何知道该函数失败以便它运行模具部分?我想我在问它的​​“或”部分如何工作。我想我以前没看过。

14
我应该继承std :: exception吗?
我已经看到至少一个可靠的消息源(我采用了C ++类)建议C ++中特定于应用程序的异常类应继承自std::exception。我不清楚这种方法的好处。 在C#中,继承的原因ApplicationException很明确:您可以获得一些有用的方法,属性和构造函数,而只需添加或覆盖所需的内容即可。有了std::exception这一切似乎你得到的是一个what()覆盖方法,你也可以同样创造自己。 那么,将其std::exception用作特定于应用程序的异常类的基类有什么好处(如果有)?有什么好的理由不继承std::exception吗?

3
如何在异常中打印完整的堆栈跟踪?
例如,在一处... //---------------a try { // some network call } catch(WebException we) { throw new MyCustomException("some message ....", we); } 在另一个地方 //--------------b try { // invoke code above } catch(MyCustomException we) { Debug.Writeline(we.stacktrace); // <---------------- } 我打印的stacktrace,它仅从a开始到b,它不包括WebException中的内部stacktrace。 我如何打印所有的堆栈跟踪?

5
R中的异常处理
关闭。此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗?更新问题,使其成为Stack Overflow 的主题。 4年前关闭。 改善这个问题 有人在R中有异常处理的示例/教程吗?官方文档非常简洁。



4
Ruby自定义错误类:message属性的继承
我似乎找不到有关自定义异常类的更多信息。 我所知道的 您可以声明您的自定义错误类,并使其继承自StandardError,因此可以使用rescued: class MyCustomError < StandardError end 这使您可以使用以下方法提高它: raise MyCustomError, "A message" 然后在救援时得到该消息 rescue MyCustomError => e puts e.message # => "A message" 我不知道 我想给我的异常一些自定义字段,但我想message从父类继承属性。我发现阅读关于这个主题是@message不是异常类的实例变量,所以我担心我的产业将无法正常工作。 谁能给我更多细节吗?如何实现带有object属性的自定义错误类?以下是正确的: class MyCustomError < StandardError attr_reader :object def initialize(message, object) super(message) @object = object end end 然后: raise MyCustomError.new(anObject), "A message" 要得到: rescue MyCustomError …

3
使用“在何时捕获”捕获异常
我遇到了C#中的这一新功能,该功能允许在满足特定条件时执行catch处理程序。 int i = 0; try { throw new ArgumentNullException(nameof(i)); } catch (ArgumentNullException e) when (i == 1) { Console.WriteLine("Caught Argument Null Exception"); } 我试图了解何时可能有用。 一种情况可能是这样的: try { DatabaseUpdate() } catch (SQLException e) when (driver == "MySQL") { //MySQL specific error handling and wrapping up the exception } catch (SQLException …

4
为什么在比较结构时此断言会引发格式异常?
我试图断言两个System.Drawing.Size结构的相等性,并且我得到了格式异常,而不是预期的断言失败。 [TestMethod] public void AssertStructs() { var struct1 = new Size(0, 0); var struct2 = new Size(1, 1); //This throws a format exception, "System.FormatException: Input string was not in a correct format." Assert.AreEqual(struct1, struct2, "Failed. Expected {0}, actually it is {1}", struct1, struct2); //This assert fails properly, "Failed. Expected {Width=0, …

1
Yesod的例外
我创建了一个使用非常原始形式的守护程序ipc(远程登录并发送具有按特定顺序包含某些单词的String)。我抢购了它,现在正在使用它将JSON消息传递到Yesod服务器。但是,对于我的设计,我确实有一些特别喜欢的东西,而且我不确定现在的选择。 这是我在做什么: buildManager :: Phase -> IO () buildManager phase = do let buildSeq = findSeq phase jid = JobID $ pack "8" config = MkConfig $ Just jid flip C.catch exceptionHandler $ runReaderT (sequence_ $ buildSeq <*> stages) config -- ^^ I would really like to keep the above …

10
我怎样才能抓到404?
我有以下代码: HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.Method = "HEAD"; request.Credentials = MyCredentialCache; try { request.GetResponse(); } catch { } 如何捕获特定的404错误?WebExceptionStatus.ProtocolError只能检测到发生错误,而不能给出错误的确切代码。 例如: catch (WebException ex) { if (ex.Status != WebExceptionStatus.ProtocolError) { throw ex; } } 只是不够有用...协议异常可能是401、503、403,实际上是任何东西。

4
一个好的尝试/捕获/最终解决方案?
我需要async在一个catch块中调用一个方法,然后再次引发异常(及其堆栈跟踪),如下所示: try { // Do something } catch { // <- Clean things here with async methods throw; } 但是很遗憾,您不能await在catch或finally块中使用。我了解到这是因为编译器没有任何办法可以返回一个catch块来执行await指令或类似指令之后的内容... 我试图用它Task.Wait()来替换await,但陷入僵局。我在网上搜索了如何避免这种情况的方法,并找到了该站点。 由于我无法更改async方法,也无法知道它们是否在使用ConfigureAwait(false),因此创建了这些方法,这些方法采用a Func<Task>,一旦我们在不同的线程上(以避免死锁),它就会启动异步方法并等待其完成: public static void AwaitTaskSync(Func<Task> action) { Task.Run(async () => await action().ConfigureAwait(false)).Wait(); } public static TResult AwaitTaskSync<TResult>(Func<Task<TResult>> action) { return Task.Run(async () => await action().ConfigureAwait(false)).Result; } public static …

15
在C中有效使用goto进行错误管理?
这个问题实际上是一个有趣的讨论的结果前一段时间在programming.reddit.com上。基本上可以归结为以下代码: int foo(int bar) { int return_value = 0; if (!do_something( bar )) { goto error_1; } if (!init_stuff( bar )) { goto error_2; } if (!prepare_stuff( bar )) { goto error_3; } return_value = do_the_thing( bar ); error_3: cleanup_3(); error_2: cleanup_2(); error_1: cleanup_1(); return return_value; } 使用goto这里似乎是最好的方法,导致所有可能的代码最整洁,最有效,或者至少在我看来如此。在代码完成中引用史蒂夫·麦康奈尔: goto在例程中很有用,该例程分配资源,对这些资源执行操作,然后重新分配资源。使用goto,您可以在代码的一部分中进行清理。跳转减少了忘记检测到错误的每个位置重新分配资源的可能性。 这种方法的另一种支持来自Linux设备驱动程序本部分一书。 …

7
我如何找到C ++中引发异常的位置?
我有一个程序会在某个地方抛出未捕获的异常。我所得到的只是关于引发异常的报告,而没有关于引发异常的信息。对于编译为包含调试符号而不通知我代码中生成异常的地方的程序,这似乎是不合逻辑的。 有什么办法可以说明我的异常来自哪里,因为没有在gdb中设置“ catch throw”并为每个抛出的异常调用回溯?

3
如何在Rails中引发异常,使其表现得与其他Rails异常一样?
我想提出一个异常,以使其执行与普通Rails异常相同的操作。特别是,在开发模式下显示异常和堆栈跟踪,并在生产模式下显示“很抱歉,但是出了点问题”页面。 我尝试了以下方法: raise "safety_care group missing!" if group.nil? 但这只是写入"ERROR signing up, group missing!"到development.log文件

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.