annoviko/pyclustering

[C++ pyclustering] Human-readable errors to Python

开放

#591 创建于 2020年2月18日

 (0 条评论) (0 个反应) (0 位负责人)Python (263 个派生)auto 404
EnhancementGood First Issue

仓库指标

星标
 (1,215 个星标)
PR 合并指标
 (30 天内没有已合并 PR)

描述

Introduction The current problem is following: in case of incorrect input data or due to some other reason (even unexpected) - C++ code throws exception that is not captured by anyone. As a result the client (python code) receives error code that is not readable. Here is an example of an error:

[WinError -529697949] Windows Error 0xe06d7363

The idea is to capture each exception in pyclustering interface and report about the problem to the client of the library, in this case - python pyclustering library.

Description C++ pyclustering interface ccore/include/interface/ and ccore/src/interface/.

The idea is to capture all exception, for example, there is a function:

pyclustering_package * agglomerative_algorithm(const pyclustering_package * const p_sample, const size_t p_number_clusters, const size_t p_link) {
    pyclustering::clst::agglomerative algorithm(p_number_clusters, (pyclustering::clst::agglomerative::type_link) p_link);

    /* ... ... ... */

    return package;
}

Wrap it by try catch block:

pyclustering_package * agglomerative_algorithm(const pyclustering_package * const p_sample, const size_t p_number_clusters, const size_t p_link) try {
    pyclustering::clst::agglomerative algorithm(p_number_clusters, (pyclustering::clst::agglomerative::type_link) p_link);

    pyclustering::dataset data;
    p_sample->extract(data);

    pyclustering::clst::agglomerative_data result;
    algorithm.process(data, result);

    pyclustering_package * package = create_package(&result.clusters());

    return package;
} 
catch (std::exception & p_error) {
    return pyclustering_pachage_from_exception(p_error);
}

Useful links

Functionality to cover All exported functions that return pyclustering_package:

  • agglomerative_interface.cpp
  • bsas_interface.cpp
  • clique_interface.cpp
  • cure_interface.cpp
  • dbscan_interface.cpp
  • elbow_interface.cpp
  • fcm_interface.cpp
  • gmeans_interface.cpp
  • hhn_interface.cpp
  • hsyncnet_interface.cpp
  • kmeans_interface.cpp
  • kmedoids_interface.cpp
  • legion_interface.cpp
  • mbsas_interface.cpp
  • metric_interface.cpp
  • optics_interface.cpp
  • pcnn_interface.cpp
  • rock_interface.cpp
  • silhouette_interface.cpp
  • som_interface.cpp
  • sync_interface.cpp
  • syncnet_interface.cpp
  • syncpr_interface.cpp
  • ttsas_interface.cpp
  • xmeans_interface.cpp

贡献者指南