Merge pull request #883 from croneter/fix-valueerror

Fix ValueError if casting to int/float
This commit is contained in:
croneter 2019-06-12 20:05:37 +02:00 committed by GitHub
commit cd524cb978
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 43 additions and 26 deletions

View file

@ -20,32 +20,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)