python - 如何在 Python 中接受迭代和非迭代返回类型
问题描述
如果以前有人问过这个问题,请原谅我。我似乎无法过滤掉有关失败iter()
覆盖的所有其他问题。
我正在使用https://github.com/mz-automation/libiec61850第三方库,它使用 SWIG 与其 C 代码交互。出于某种原因,如果出现错误,SWIG 会返回不同的内容。
>>> iec61850.IedConnection_getFileDirectory(mms._mms_con, "/SETTINGS")
[<iec61850.sLinkedList; proxy of <Swig Object of type 'LinkedList' at 0x03063C20> >, 0]
>>> iec61850.IedConnection_getFileDirectory(mms._mms_con, "/FAKE")
22
>>>
我该如何接受这两种情况?我唯一能想到的是 try/except TypeError,但在这种情况下我似乎无法得到错误条件。有没有办法修复 SWIG 翻译?
从iec61850_client.h:
LIB61850_API LinkedList /*<FileDirectoryEntry>*/
IedConnection_getFileDirectory(IedConnection self, IedClientError* error, const char* directoryName);
使用来自以下位置的 SWIG i 文件:
https://github.com/mz-automation/libiec61850/blob/v1.4/pyiec61850/iec61850.i
解决方案
一位同事帮我解决了这个问题。我没有意识到您可以将列表设置为单个对象。呃。下面的代码很容易处理这两种情况。
try:
[device_list, ied_error] = ret_object
except TypeError:
# SWIG returns just an int on some failures.
ied_error = ret_object
为了将来参考,这是使用单一返回类型的一个很好的理由......
推荐阅读
- algorithm - 预购插入
- android - 在同一个 android 应用程序中为不同域维护不同的工作流程
- javascript - 如何安装模拟服务器和协议文件以进行 API 测试?
- spring - 使用 JPA 创建列存储表
- android - FCM 通知退订
- c# - Aspose PDF 如何找到许可对象
- amazon-web-services - AWS Docker 部署失败并出现错误:未知速记标志:'e' in -e and no basic auth credentials
- jquery - 有没有办法让我的 div 在使用 jquery 滚动功能和动画达到一定高度后无缝滑动?
- spring - 我可以在 Bean 关闭功能时让 Spring 提供带有 null 的 @Autowired 构造函数吗?
- xslt - 在 foreach 循环中使用变量构建 XSLT 字符串