Fix ValueError if casting to int/float

This commit is contained in:
croneter 2019-06-12 13:17:17 +02:00
parent 563e86c8db
commit e08e9b0d32
2 changed files with 43 additions and 26 deletions

View file

@ -21,32 +21,47 @@ WINDOW_COMMAND = 'plexkodiconnect.command'.encode('utf-8')
def cast(func, value):
"""
Cast the specified value to the specified type (returned by func). Currently this
only support int, float, bool. Should be extended if needed.
Cast the specified value to the specified type (returned by func). Currently
this only support int, float, bool. Should be extended if needed.
Parameters:
func (func): Calback function to used cast to type (int, bool, float).
value (any): value to be cast and returned.
Returns None if something goes wrong
"""
if value is not None:
if func == bool:
if value is None:
return value
elif func == bool:
return bool(int(value))
elif func == unicode:
if isinstance(value, (int, long, float)):
return unicode(value)
elif isinstance(value, unicode):
return value
else:
return value.decode('utf-8')
elif func == str:
if isinstance(value, (int, long, float)):
return str(value)
elif isinstance(value, str):
return value
else:
return value.encode('utf-8')
elif func in (int, float):
elif func == int:
try:
return func(value)
return int(value)
except ValueError:
return float('nan')
try:
# Converting e.g. '8.0' fails; need to convert to float first
return int(float(value))
except ValueError:
return
elif func == float:
try:
return float(value)
except ValueError:
return
return func(value)
return value
def kodi_window(property, value=None, clear=False):

View file

@ -268,11 +268,13 @@ class AttributeDict(dict):
def cast(func, value):
"""
Cast the specified value to the specified type (returned by func). Currently this
only support int, float, bool. Should be extended if needed.
Cast the specified value to the specified type (returned by func). Currently
this only support int, float, bool. Should be extended if needed.
Parameters:
func (func): Calback function to used cast to type (int, bool, float).
value (any): value to be cast and returned.
Returns None if something goes wrong
"""
if value is None:
return value
@ -294,18 +296,18 @@ def cast(func, value):
return value.encode('utf-8')
elif func == int:
try:
return func(value)
return int(value)
except ValueError:
try:
# Converting e.g. '8.0' fails; need to convert to float first
return int(float(value))
except ValueError:
return float('nan')
return
elif func == float:
try:
return func(value)
return float(value)
except ValueError:
return float('nan')
return
return func(value)