我想在C#中序列化一个exception对象。 但是,由于Exception类没有标记为[Serializable] ,所以这是不可能的。 有没有办法解决这个问题? 如果在应用程序执行过程中出现问题,我想通知发生的exception。 我的第一个反应是序列化它。
问:是否有更好的方法来处理SqlException? 以下示例依赖于解释消息中的文本。 Eg1:如果一个表不存在,我有一个现有的try catch来处理。 忽略我可以检查表是否存在的事实。 try { //code } catch(SqlException sqlEx) { if (sqlEx.Message.StartsWith("Invalid object name")) { //code } else throw; } Eg2:没有try catch显示重复键exception if (sqlEx.Message.StartsWith("Cannot insert duplicate key row in object")) 解决scheme:我的SqlExceptionHelper的开始 //– to see list of error messages: select * from sys.messages where language_id = 1033 order by message_id public static class SqlExceptionHelper […]
在C#代码中,你能捕捉到一些非托pipe库深处抛出的本地exception吗? 如果是这样,你需要做不同的事情来抓住它,或做一个标准的尝试…赶上得到它?
在.NET解决scheme中创buildexception类时的最佳做法是:从System.Exception或System.ApplicationException派生?
我们有一个单线程调用的函数(我们将其命名为主线程)。 在函数体内,我们产生了多个工作线程来完成CPU密集型工作,等待所有线程完成,然后在主线程上返回结果。 结果是调用者可以天真地使用这个函数,并且在内部它将使用多个核心。 迄今为止都很好.. 我们面临的问题是处理例外。 我们不希望工作线程上的exception使应用程序崩溃。 我们希望调用者的函数能够在主线程上捕获它们。 我们必须在工作线程上捕获exception,并将它们传播到主线程,让它们从这里继续展开。 我们怎么做到这一点? 我能想到的最好的是: 在我们的工作线程(std :: exception和我们自己的几个)上捕获各种exception。 loggingexception的types和消息。 在主线程上有一个相应的switch语句,它重新引发工作线程上logging的任何types的exception。 这具有明显的缺点,即只支持一组有限的exceptiontypes,并且每当添加新的exceptiontypes时都需要修改。
VBA中的error handling有什么好的模式? 特别是在这种情况下我该怎么做: … some code … … some code where an error might occur … … some code … … some other code where a different error might occur … … some other code … … some code that must always be run (like a finally block) … 我想要处理这两个错误,并在错误发生后的代码之后恢复执行。 另外,最后的代码必须总是运行 – 不pipe之前抛出什么exception。 我怎样才能达到这个结果?
我们有一个WPF应用程序,其中的一部分可能在运行时抛出exception。 我想在全球范围内捕捉任何未处理的exception并将其logging下来,否则继续执行程序,就好像什么也没发生一样(有点像VB的On Error Resume Next )。 这在C#中可能吗? 如果是这样的话,我需要把exception处理代码放在哪里? 目前我看不到任何单一的地方,我可以包装一个try / catch ,并捕获所有可能发生的exception。 即使这样,我也不会因为这个问题而放弃任何已经被处决的事情。 还是我在这里考虑可怕的错误方向? ETA:因为很多人指出:应用不是用来控制核电站的。 如果它崩溃,这不是什么大不了的事情,但大多数与UI相关的随机exception在它将被使用的上下文中是令人讨厌的。 那里有(也可能还有)其中一些,因为它使用插件架构,可能会被其他人(也就是在这种情况下的学生;所以没有经验丰富的开发人员能够编写完全无差错的代码)进行扩展。 至于被捕获的exception:我将它们logging到日志文件中,包括完整的堆栈跟踪。 那是这个练习的重点。 只是为了对付那些把我的比喻成VB的OERN字面的人。 我知道,盲目地忽略某些类别的错误是危险的,可能会破坏我的应用程序实例。 如前所述,这个程序对任何人都不是任务关键的。 没有一个正确的头脑会把人类文明的生存下去。 这只是testing某些devise方法的一个小工具。 软件工程。 对于应用程序的直接使用,在例外情况下可能不会发生很多事情: 没有exception处理 – 错误对话框和应用程序退出。 实验必须重复,尽pipe可能与另一个主题。 没有错误logging,这是不幸的。 一般exception处理 – 良性错误被困,没有造成伤害。 这应该是从我们在开发过程中看到的所有错误判断的常见情况。 忽视这种错误不应该有直接的后果。 核心数据结构经过了充分的testing,可以轻松实现。 一般的exception处理 – 严重的错误被困,可能会在稍后崩溃。 这可能很less发生。 到目前为止,我们从未见过。 无论如何这个错误是logging的,崩溃可能是不可避免的。 所以这在概念上类似于第一种情况。 除了我们有一个堆栈跟踪。 在大多数情况下,用户甚至不会注意到。 至于程序产生的实验数据:最严重的错误只会导致没有数据被logging。 微妙的变化改变了实验的结果,所以很less发生。 即使在这种情况下,如果结果看起来可疑,logging的错误; 如果它是一个总exception值,仍然可以丢弃该数据点。 总结一下:是的,我认为自己仍然至less有一部分是理智的,我不认为全局的exception处理程序会导致程序运行必然是完全邪恶的。 如前所述,这样的决定可能是有效的,这取决于应用程序。 在这种情况下,它被判断为一个有效的决定,而不是完全和彻底的废话。 对于任何其他应用程序,这个决定可能看起来不同 但是请不要指责我或者其他从事这个项目的人有可能因为我们忽略了错误而炸毁世界。 […]
你如何导致通过logging模块输出未捕获的exception而不是stderr ? 我意识到做到这一点的最好方法是: try: raise Exception, 'Throwing a boring exception' except Exception, e: logging.exception(e) 但是我的情况是这样的,如果logging.exception(…)在exception未被捕获的时候自动调用,那将是非常好的 。
我正在和同事讨论有关从构造函数中抛出exception的问题,我想我想得到一些反馈。 从devise的angular度来看,从构造函数中抛出exception是可以的? 假设我在课堂上包装了一个posix互斥体,它看起来像这样: class Mutex { public: Mutex() { if (pthread_mutex_init(&mutex_, 0) != 0) { throw MutexInitException(); } } ~Mutex() { pthread_mutex_destroy(&mutex_); } void lock() { if (pthread_mutex_lock(&mutex_) != 0) { throw MutexLockException(); } } void unlock() { if (pthread_mutex_unlock(&mutex_) != 0) { throw MutexUnlockException(); } } private: pthread_mutex_t mutex_; }; 我的问题是,这是做这件事的标准方法吗? 因为如果pthread mutex_init调用失败,互斥对象不可用,所以抛出exception可确保不会创build互斥锁。 我应该为Mutex类创build一个成员函数init,然后调用pthread […]
我想知道为什么下面的代码在Google Chrome中不起作用: // creates a xss console log var cl = ( typeof( console ) != 'undefined' ) ? console.log : alert; cl('teste'); 输出:未捕获TypeError:非法调用 谢谢。