C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – try..catch宏包装器等效于cython大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在包装大量的C函数,如果底层套接字连接丢失,可能引发异常.虽然我已经想出如何包装我的“获取连接”功能来重新建立连接和/或尝试列表中的其他可用服务器,但我无法找到一个解决方案来创建一个try..except包装器来提供给80 C功能.
#-- client.pxd ---

cdef extern from "rpc/RpcService.h": 
    cdef cppclass RpcServiceClient:
        void getProject(ProjectT&,Guid& id) nogil except +

cdef extern from "client.h":
    cdef cppclass Client:
        RpcServiceClient proxy() nogil 

    cdef Client* getClient() nogil except +


#-- module.pxd ---

cdef inline Client* conn() except *:
   # wrap getClient() here with try..except if the 
   # connection was never established

cpdef inline get_project(Guid& guid):
    cdef: 
        ProjectT projT  # cpp object
        Project project # cdef python class

    # this would catch fine in my conn() wrapper
    # if the connection had never been established
    # the first time. But if the existing connection
    # suddenly drops,it will be getProject() that
    # raises the exception
    conn().proxy().getProject(projT,guid)

    project = initProject(projT)
    return project

关于如何将所有这些C函数包装成try_call()之类的任何提示
如果这是纯python,我可以简单地做这样的事情:

def try_call(fn,*args,**kwargs):
    # try fn(*args,**kwargs) and handle

try_call(conn().proxy().getProject,projT,guid)

但显然我不能将这些cython函数作为python对象传递(或者我可以吗?).

或者C中的这样的事情:

TRY_CALL_OR_RECONNECT
conn().proxy().getProject(projT,guid)
END_TRY_CALL_OR_RECONNECT
@H_404_16@解决方法
你可能想看看装饰员
def try_wrapper(x):
    try:
        x()
    except:
        doSomethingElse()

@try_wrapper
def defYouWantToWrap():
    doSomething()

这可能不是最好的教程,但希望它可以指出你正确的方向

大佬总结

以上是大佬教程为你收集整理的c – try..catch宏包装器等效于cython全部内容,希望文章能够帮你解决c – try..catch宏包装器等效于cython所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: