python - 如何单独捕获这些异常?

标签 python exception quickbooks

我正在编写一个与 Quickbooks 交互的 Python 程序。连接到 Quickbooks 时,根据问题,我可能会遇到两个常见异常之一:

pywintypes.com_error: (-2147352567, 'Exception occurred.', (0, 'QBXMLRP2.RequestProcessor.2', 'The QuickBooks company data file is currently open in a mode other than the one specified by your application.', None, 0, -2147220464), None)

pywintypes.com_error: (-2147352567, 'Exception occurred.', (0, 'QBXMLRP2.RequestProcessor.2', 'Could not start QuickBooks.', None, 0, -2147220472), None)

使用 except Exception as e 捕获一般异常表明 e 的类型是<class 'pywintypes.com_error'> ,它不能用于捕获异常:

... catch pywintypes.com_error as e:
NameError: global name 'pywintypes' is not defined

那么我如何以非通用方式捕获这两个异常?理想情况下,代码应具有以下布局:

try:
    qb = qbsdk_interface.Qbsdk_Interface(QB_FILE)

except QbWrongModeError as e:
    print('Quickbooks is open in the wrong mode!')

except QbClosedError as e:
    print('Quickbooks is closed!')

except Exception as e:
    print('Something else went wrong!')

当然,异常(exception)QbWrongModeErrorQbClosedError不存在,那么应该有什么来代替它们呢?

最佳答案

一发布,我就找到了在 question that appeared in the Related sidebar 中以非通用方式捕获异常的方法。 .下面是捕获这些异常的方法:

from pywintypes import com_error

except com_error as e:

请注意,无法单独处理异常的不同原因,因此必须在 except 中检查返回码通过比较 e.exceptinfo[5] 的值来子句:

except com_error as e:

    if e.excepinfo[5] == -2147220464:
        print('Please change the Quickbooks mode to Multi-user Mode.')

    elif e.excepinfo[5] == -2147220472:
        print('Please start Quickbooks.')

    else:
        raise e

我曾考虑过将这个问题标记为一个骗局,但考虑到其他相关问题都没有处理在这种单一类型下区分抛出的不同异常的情况,我把这个留作原样处理并回答这个问题。

关于python - 如何单独捕获这些异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25053785/

相关文章:

python - 如何使用 Tesseract 对图像进行 OCR

java - 在异常的参数中使用泛型

java - Spring MVC 缺少请求属性

multithreading - 将异常抛出到另一个线程

php - 如何使用 consolibyte API 删除 Quickbook 中的客户?

QuickBooks API - 检索所有帐户的交易

python - 选择 PySpark 数据框中的列

python - 从 Scipy Signal 对象获取峰的宽度和面积

python - If-Then-ElseIf-Then 在混合整数线性规划中

c# - Azure Web应用程序问题: System. Runtime.InteropServices.COMException 80040154类未注册