Tag: 线程exception

如何获得Pythonexception文本

我想在我的C ++应用程序中embeddedpython。 我正在使用Boost库 – 伟大的工具。 但是我有一个问题。 如果python函数抛出一个exception,我想赶上它,并在我的应用程序中打印错误,或得到一些像python脚本中的行号,导致错误的详细信息。 我该怎么做? 我找不到任何函数在Python API或Boost中获取详细的exception信息。 try { module=import("MyModule"); //this line will throw excetion if MyModule contains an error } catch ( error_already_set const & ) { //Here i can said that i have error, but i cant determine what caused an error std::cout << "error!" << std::endl; } PyErr_Print()只是打印错误文本到标准错误,并清除错误,所以它不能解决

我应该如何防守?

我正在使用一个用于创build数据库连接的小例程: 之前 public DbConnection GetConnection(String connectionName) { ConnectionStringSettings cs= ConfigurationManager.ConnectionStrings[connectionName]; DbProviderFactory factory = DbProviderFactories.GetFactory(cs.ProviderName); DbConnection conn = factory.CreateConnection(); conn.ConnectionString = cs.ConnectionString; conn.Open(); return conn; } 然后我开始研究.NET框架文档,查看各种事情的logging行为,看看我能否处理它们。 例如: ConfigurationManager.ConnectionStrings… 该文件说,如果ConnectionStrings无法检索集合,则会调用ConfigurationErrorException 。 在这种情况下,我无法处理这个exception,所以我会放手。 下一部分是ConnectionStrings的实际索引来查找connectionName : …ConnectionStrings[connectionName]; 在这种情况下ConnectionStrings文档说,如果无法find连接名称,该属性将返回null 。 我可以检查发生这种情况,并抛出一个exception,让高人,他们给了一个无效的connectionName: ConnectionStringSettings cs= ConfigurationManager.ConnectionStrings[connectionName]; if (cs == null) throw new ArgumentException("Could not find connection string \""+connectionName+"\""); 我重复同样的练习: DbProviderFactory factory […]

没有堆栈跟踪的循环exception – 如何重置?

在我的应用程序日志(使用log4j),我看到一个NullPointerException,但没有堆栈跟踪。 我知道,作为一个优化,当一个exception发生多次 – jvm停止产生堆栈跟踪。 问题是前一段时间发生的exception,我的所有日​​志都填充了没有堆栈跟踪的exception。 有没有办法“重置”这个机制,所以下一个抛出的exception将被打印完整的堆栈跟踪? 我不想重新启动应用程序,因为它很难重现此错误,重新启动可能会导致“消失”… 谢谢!

为什么C ++ STL iostream不是“exception友好”?

我习惯于Delphi VCL框架,其中TStreams抛出错误的例外(例如文件未find,磁盘已满)。 我正在移植一些代码来使用C ++ STL来代替,而且iostreams不会在默认情况下抛出exception,而是设置badbit / failbit标志 。 两个问题 a:为什么会这样 – 从第一天开始,对于一个有例外的语言来说,这似乎是一个奇怪的devise决定? b:如何最好地避免这种情况? 我可以生产出像我所期望的那样的垫片类,但是这感觉就像重新发明了轮子。 也许有一个BOOST库,这是一个更安全的方式吗?

你用一段时间结束你的exception信息吗?

我已经看到有和没有句点的两个exception消息。 我可以想一些为什么两个都可以的好理由。 没有点会给你自由添加期限或离开它,如果你想。 如果邮件进入某种标题栏或某物,可能会有用。 用一个点,你总是会知道你有一个“完整的句子”,看起来更完整。 你推荐哪一个? 也可能是本地化资源string中的问题。 很明显,你不能在所有事情之后放置一段时间(在button和菜单项上的文本之后的周期看上去很奇怪)。 但是,你是否应该把所有的时间都放在一致的地方,然后在有用的地方添加它? 或者你宁愿放一个看起来合适的时期? 例如,在所有的资源string和exception消息是句子之后,而不是在那些单词之后。 但是,那么短句怎么样呢? 比如“创build一个新文件”。 也许可以省略那些被认为是行动的string…(只是想在我在这里打字… 不是世界上最重要的事情,我知道。 但是像这样的小事在一段时间之后往往会让我烦恼。 我喜欢一致性,并知道为什么我要做我所做的事情。 问题是我不确定哪一个要去:p

Newtonsoft.Json.DeserializeObject抛出什么exception?

Newtonsoft.Json.DeserializeObject抛出什么exception? 我想要处理它们。 http://james.newtonking.com/json/help/?topic=html/M_Newtonsoft_Json_JsonConvert_DeserializeObject.htm#seeAlsoToggle

当一个属性不能为null时使用什么exceptiontypes?

在我的应用程序中,如果特定类的属性为null或空(如果是string),则需要引发exception。 我不确定在这种情况下使用什么是最好的例外。 我讨厌创build一个新的exception,我不确定在这种情况下ArgumentNullException是否合适。 我应该创build一个新的exception还是有我可以使用的exception? 我不介意抛出一个ApplicationException。

Rubyexception – 为什么“其他”?

我想了解Ruby中的exception,但我有点困惑。 我正在使用的教程说,如果发生的exception与救援语句所标识的任何exception都不匹配,您可以使用“else”来捕获它: begin # – rescue OneTypeOfException # – rescue AnotherTypeOfException # – else # Other exceptions ensure # Always will be executed end 不过,我也在后面的教程中看到“rescue”被使用,没有指定一个例外: begin file = open("/unexistant_file") if file puts "File opened successfully" end rescue file = STDIN end print file, "==", STDIN, "\n" 如果你能做到这一点,那么我需要使用其他吗? 或者我可以像这样在最后使用通用救援? begin # – rescue OneTypeOfException # – […]

多次或单次尝试抓住

我正在清理一些我的代码,我来到了一个点,我不知道哪条路线会更好。 目前,我的方法大部分都有一个try catch块,最后处理了一些单独的exception,但是我认为有更多的try catch块会更好。 然而,在分解代码的同时,我又到了一个为同一类exception写入多个块的地步。 我可以看到为每个部分编写一个块,因为我可以给出更具体的说明为什么失败。 我的问题是…这样做有缺点吗? 有没有性能问题或其他一些我没有看到的隐藏的怪物? 另外,在一个方法中处理多个exception的首选方法是什么,是否有行业标准? 为了更好地说明我的观点,这里有一些伪代码 //multiple try catch for same exception try { //some code here } catch (MyException e) { //specific error message here } try { //some different code here } catch (MyException e) { //more specific error message indicating a different issue }

有没有办法来防止从sys.exit()引发SystemExitexception被捕获?

文档说,调用sys.exit()引发了一个SystemExitexception,可以在外层捕获。 我有一种情况,我想明确地,毫无疑问地从testing用例中退出,但是unittest模块捕获SystemExit并阻止退出。 这通常很好,但是我想要处理的具体情况是我们的testing框架检测到它被configuration为指向非testing数据库。 在这种情况下,我想退出并阻止任何进一步的testing运行。 当然,由于unit testing陷阱SystemExit并继续愉快,它阻碍了我。 我迄今唯一想到的select是使用ctypes或类似的东西直接调用exit(3),但是对于一些应该非常简单的事情来说,这看起来像是一个非常糟糕的黑客攻击。