Questions tagged «exception»

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

18
对BadImageFormatException进行故障排除
我有一个使用Visual Studio 2010用C#编写的Windows服务,目标是完整的.NET Framework4。从Debug版本运行时,该服务将按预期运行。但是,当我从Release版本运行它时,我得到了System.BadImageFormatException(详细信息如下)。我一直在互联网上寻找解决方案,但到目前为止,我发现的每一件事都没有帮助我找到解决方案。 Windows 7 64位(dev)和Windows XP SP3 32位(目标)系统上都存在此问题。 到目前为止,这是我尝试过的: 经过验证的构建设置(例如Platform Target)都相同(x86)。 使用带有/ verbose选项的peverify来确保程序集二进制文件有效。 使用fuslogvw查找任何加载问题。 使用CheckAsm查找丢失的文件或组件。 所有这些检查都没有改变任何东西。我在下面提供了异常信息的全文,其中一些名称已更改,以保护我的企业主的秘密。 System.BadImageFormatException未处理 消息=无法加载文件或程序集'XxxDevices,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null'或其依赖项之一。试图加载格式错误的程序。 来源= XxxDevicesService FileName = XxxDevices,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null FusionLog =程序集管理器从以下位置加载:C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ clr.dll 在可执行文件c:\ Dev …
107 c#  .net  exception 

11
无效的泛型类型参数的最佳例外
我目前正在为UnconstrainedMelody写一些代码,该代码具有与枚举有关的通用方法。 现在,我有一个带有一堆方法的静态类,这些方法只能与“标志”枚举一起使用。我不能将此添加为约束...因此它们也可能会与其他枚举类型一起调用。在那种情况下,我想抛出一个异常,但是我不确定该抛出哪个异常。 只是要具体一点,如果我有这样的东西: // Returns a value with all bits set by any values public static T GetBitMask<T>() where T : struct, IEnumConstraint { if (!IsFlags<T>()) // This method doesn't throw { throw new ??? } // Normal work here } 最好的例外是什么?ArgumentException听起来很合逻辑,但这是类型参数而不是普通参数,这很容易使事情混淆。我应该介绍自己的TypeArgumentException课程吗?使用InvalidOperationException?NotSupportedException?还要别的吗? 我宁愿没有为此创造我自己的异常,除非它显然是做正确的事。
106 c#  generics  exception 

4
如何在嵌套的try / except块中重新引发异常?
我知道如果我想重新引发异常,我会raise在相应的except块中简单地使用不带参数的形式。但是给定一个嵌套的表达式 try: something() except SomeError as e: try: plan_B() except AlsoFailsError: raise e # I'd like to raise the SomeError as if plan_B() # didn't raise the AlsoFailsError 我如何在SomeError不破坏堆栈跟踪的情况下重新筹集?raise在这种情况下,仅此一项便会重新提高AlsoFailsError。或者我该如何重构我的代码来避免此问题?

9
如何在线程之间传播异常?
我们有一个单线程调用的函数(我们将其命名为主线程)。在函数主体内,我们产生多个工作线程来执行CPU密集型工作,等待所有线程完成,然后在主线程上返回结果。 结果是调用者可以天真地使用该函数,并且在内部它将使用多个内核。 到目前为止一切都很好。 我们遇到的问题是处理异常。我们不希望工作线程上的异常会使应用程序崩溃。我们希望函数的调用者能够在主线程上捕获它们。我们必须捕获工作线程上的异常,并将其传播到主线程,以使它们继续从那里展开。 我们应该怎么做? 我能想到的最好的是: 在我们的工作线程上捕获各种各样的异常(std :: exception和我们自己的一些异常)。 记录异常的类型和消息。 在主线程上有一个对应的switch语句,该语句会引发工作线程上记录的任何类型的异常。 这具有明显的缺点,即仅支持有限的一组异常类型,并且每当添加新的异常类型时都需要进行修改。


14
连接Java-MySql:不允许公钥检索
我尝试使用连接器8.0.11将MySql数据库与Java连接。一切似乎都还可以,但是我有一个例外: 线程“主”中的异常java.sql.SQLNonTransientConnectionException:不允许公共密钥检索 堆栈跟踪: Exception in thread "main" java.sql.SQLNonTransientConnectionException: Public Key Retrieval is not allowed at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:108) at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:95) at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:862) at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:444) at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:230) at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:226) at com.mysql.cj.jdbc.MysqlDataSource.getConnection(MysqlDataSource.java:438) at com.mysql.cj.jdbc.MysqlDataSource.getConnection(MysqlDataSource.java:146) at com.mysql.cj.jdbc.MysqlDataSource.getConnection(MysqlDataSource.java:119) at ConnectionManager.getConnection(ConnectionManager.java:28) at Main.main(Main.java:8) 连接器管理器: public class ConnectionManager { public static final String serverTimeZone = "UTC"; …

4
如何在Python中正确获取异常消息
从Python标准库的组件中获取异常消息的最佳方法是什么? 我注意到在某些情况下,您可以通过如下message字段获取它: try: pass except Exception as ex: print(ex.message) 但在某些情况下(例如在套接字错误的情况下),您必须执行以下操作: try: pass except socket.error as ex: print(ex) 我想知道是否有标准方法可以涵盖大多数情况?






8
为什么不等待Task.WhenAll引发AggregateException?
在此代码中: private async void button1_Click(object sender, EventArgs e) { try { await Task.WhenAll(DoLongThingAsyncEx1(), DoLongThingAsyncEx2()); } catch (Exception ex) { // Expect AggregateException, but got InvalidTimeZoneException } } Task DoLongThingAsyncEx1() { return Task.Run(() => { throw new InvalidTimeZoneException(); }); } Task DoLongThingAsyncEx2() { return Task.Run(() => { throw new InvalidOperation();}); } …



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.