Search code examples
pythonparsingconfigconfigparser

Configparser Integers


I am not sure what I am doing wrong. Previously, the code was this:

volume = min(60, max(30, volume))

However, after trying with configparser, I keep getting a 500 error on my Twilio Server.

volume_min = configParser.get('config_searchandplay', 'volume_min')
volume_max = configParser.get('config_searchandplay', 'volume_max')
volume = min(volume_max, max(volume_min, volume)) # Max Volume Spam Protection

CONFIG.ini:

[config_searchandplay]
#Volume Protection
volume_max = 90
volume_min = 10 

Solution

  • The problem of your method is that ConfigParser.get gives you a (unicode) string. So you should convert the values first to number (using int() or float()):

    vol_max = int(configParser.get('config_searchandplay', 'volume_max'))
    vol_min = int(configParser.get('config_searchandplay', 'volume_min'))
    volume = min(vol_max, max(vol_min, volume))
    

    Or use the respective convenience methods: ConfigParser.getint or ConfigParser.getfloat:

    vol_max = configParser.getint('config_searchandplay', 'volume_max')
    vol_min = configParser.getint('config_searchandplay', 'volume_min')
    

    Although min works on strings:

    >>> min(u'90',u'10')
    u'10'
    

    It will not always give the answer you are looking for since it does a string comparison. The following is what you want to avoid:

    >>> min(u'9',u'10')
    u'10'
    

    Therefore you need to convert the string to a number:

    >>> min(int(u'9'),(u'90'))
    9