我正在使用ystockquote.py,我正在尝试检索有关特定股票的信息。从我的代码中检索到的一些信息可能是N / A,如下面的行:
properties['ask_realtime'] = float(ystockquote.get_ask_realtime(stock))
由于ystockquote.get_ask_realtime(stock)将返回一个字符串,那么检查以确保它不是'N / A'字符串的最佳,优雅的方法是什么?我有更多的行与改变字符串浮动有关,所以我真的需要一个很好的方法来做到这一点。
答案 0 :(得分:3)
为什么不定义自己的浮点转换器:
def float_or_na(value):
return float(value if value != 'N/A' else 'nan')
或上面的评论:
def float_or_na(value):
return float(value) if value != 'N/A' else None
将NULL值输入数据库。
答案 1 :(得分:2)
这正是try...except
为
try:
#Code that assumes value is float
properties['ask_realtime'] = float(ystockquote.get_ask_realtime(stock))
except ValueError:
#Code that runs as soon as a ValueError pops up
else:
#Code that runs only if try branch finishes successfully (optional)
finally:
#Code that runs after try or except branch finishes (optional)
有些注意事项:
except
分支指定确切的错误,但它被认为是一种好的形式,有助于防止屏蔽错误。如果您想处理多种类型的错误,则每个except
分支
except
分支仅在引发指定异常时运行(或者如果未指定则引发任何异常)finally
分支将始终运行。它是可选的,但有时非常方便try
分支内的任何行都不会被执行except
或finally
分支中引发的任何异常都将被正常抛出示例强>:
try:
print 1
float(val)
print 2
except ValueError:
print 3
else:
print 4
finally:
print 5
使用val = "4.2"
上面的代码打印
1
2
4
5
使用val = "a"
上面的代码打印
1
3
5