I'm playign with Python bindings for libconfig, and one of the methods
does something that seems very odd to me.  The purpose of the method
is to fetch the value found a a particular path within the
configuration namespace.

If the path exists and has a scalar value the method returns the tuple
(<value>,True).  Otherwise it returns ('',False).  AFAICT, the latter
happens in either of two cases: the path doesn't exist at all, or the
path exists but doesn't have a scalar value (it's an aggretate object
such as a list, group, or array).

This seems distinctly un-pythonic.

I would think that the right thing to do would be to either return the
requested value or raise an exception.  The libconfig C++ API defines
a "SettingNotFound" exception and "SettingTypeException" that seem
appropriate in the two failure cases.

Is there something about implementing bindings using Boost that makes
this sort of (<value>,<success>) return tuple a desirable way to do
things?

FWIW, here's the method I find puzzling:

  tuple value ( const char * path )
  {
    std::string v_string;
    if ( config->lookupValue ( path, v_string ) )
      return make_tuple ( v_string.c_str(), true );

    unsigned int v_uint;
    if ( config->lookupValue ( path, v_uint ) )
      return make_tuple ( v_uint, true );

    int v_int;
    if ( config->lookupValue ( path, v_int ) )
      return make_tuple ( v_int, true );

    bool v_bool;
    if ( config->lookupValue ( path, v_bool ) )
      return make_tuple ( v_bool, true );

    unsigned long long v_ulonglong;
    if ( config->lookupValue ( path, v_ulonglong ) )
      return make_tuple ( v_ulonglong, true );

    long long v_longlong;
    if ( config->lookupValue ( path, v_longlong ) )
      return make_tuple ( v_longlong, true );

    float v_float;
    if ( config->lookupValue ( path, v_float ) )
      return make_tuple ( v_float, true );

    double v_double;
    if ( config->lookupValue ( path, v_double ) )
      return make_tuple ( v_double, true );

    return make_tuple ( "", false );
  }


  


-- 
Grant Edwards               grant.b.edwards        Yow! Don't SANFORIZE me!!
                                  at               
                              gmail.com            
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to