如何在 Python 中接受 iter 和非 iter return 类型
How to accept iter and non-iter return types in 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
为了将来参考,这是使用单一 return 类型的一个很好的理由...
如果之前有人问过这个问题,请原谅。我似乎无法过滤掉所有其他有关失败 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
为了将来参考,这是使用单一 return 类型的一个很好的理由...