将字符串转换为浮点python不适用

将字符串转换为浮点python不适用,python,Python,我正在使用ystockquote.py,并试图检索与特定股票相关的信息。从我的代码中检索到的某些信息可能是不适用的,如下所示: properties['ask_realtime'] = float(ystockquote.get_ask_realtime(stock)) 由于ystockquote.get\u ask\u realtime(stock)将返回一个字符串,那么最好的、优雅的检查方法是什么,以确保它不是“N/a”字符串?我有更多的行与将字符串更改为浮点有关,因此我确实需要一种很好的

我正在使用ystockquote.py,并试图检索与特定股票相关的信息。从我的代码中检索到的某些信息可能是不适用的,如下所示:

properties['ask_realtime'] = float(ystockquote.get_ask_realtime(stock))

由于ystockquote.get\u ask\u realtime(stock)将返回一个字符串,那么最好的、优雅的检查方法是什么,以确保它不是“N/a”字符串?我有更多的行与将字符串更改为浮点有关,因此我确实需要一种很好的方法来完成此操作。

为什么不定义您自己的浮点转换器:

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

将空值输入数据库。

为什么不定义自己的浮点转换器:

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
获取数据库中的空值。

这正是我们所做的

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
    分支仅在引发指定异常时运行(或在未指定异常时引发任何异常)
  • 不管怎样,
    finally
    分支都将始终运行。它是可选的,但有时非常方便
  • 引发异常的行之后的
    try
    分支中的任何行都不会执行
  • 分支中引发的任何异常(除了
    最终
    分支)都将正常抛出
示例

try:
    print 1
    float(val)
    print 2
except ValueError:
    print 3
else:
    print 4
finally:
    print 5
使用
val=“4.2”
打印上述代码

1
2
4
5
1
3
5
使用
val=“a”
打印上述代码

1
2
4
5
1
3
5
这正是我们的目的

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
    分支仅在引发指定异常时运行(或在未指定异常时引发任何异常)
  • 不管怎样,
    finally
    分支都将始终运行。它是可选的,但有时非常方便
  • 引发异常的行之后的
    try
    分支中的任何行都不会执行
  • 分支中引发的任何异常(除了
    最终
    分支)都将正常抛出
示例

try:
    print 1
    float(val)
    print 2
except ValueError:
    print 3
else:
    print 4
finally:
    print 5
使用
val=“4.2”
打印上述代码

1
2
4
5
1
3
5
使用
val=“a”
打印上述代码

1
2
4
5
1
3
5

如果字符串是
N/A
,会发生什么<代码>无
?什么都不应该分配?其他选项?我不希望分配任何内容,因为我正在尝试获取这些信息并将其放入Django的数据库中。如果字符串为
N/a
,会发生什么情况<代码>无?什么都不应该分配?其他选项?我不希望分配任何内容,因为我正在尝试获取这些信息并将其放入Django的数据库中。如果我有一个浮点数列表并对其排序,是否会处理包含“nan”的浮点数,并将其置于列表的末尾,假设排序是从最大到最小的?@user2548635:很遗憾,不是这样。但是你可以很容易地自己排序,例如,
排序(somelist,key=lambda x:(~math.isnan(x),x),reverse=True)
。如果我有一个浮点数列表并对它们进行排序,那么包含“nan”的浮点数是否会被处理并位于列表的末尾,假设排序从最大到最小?@user2548635:不幸的是不会。但是你可以很容易地自己排序,例如,
排序(somelist,key=lambda x:(~math.isnan(x),x),reverse=True)