为什么应该解决时仍收到“ NoneType”错误?

时间:2019-12-20 16:55:51

标签: python rest nonetype

我正在调用某些单元格可能为空白的数据,并尝试根据某些条件对其进行过滤。

if data is not None:
   if data <= 50000:
     print(data)

我收到一条错误消息,指出“ NoneType”数据不能与整数进行比较。为什么即使在上面的第一行代码过滤掉NoneTypes之后,为什么我仍然收到此错误?

为澄清起见而进行编辑:实际上是这样设置代码的,它从Polygon api数据提要(https://polygon.io/docs/#getting-started)中提取数据。

tickers = api.polygon.all_tickers()
for ticker in tickers:
   if ticker.prevDay['c'] >= 20:
     company = api.polygon.company(ticker.ticker)
     if company.marketcap is not None:
        if company.marketcap <= 500000000:
           print(ticker.ticker)

这将从数据源中获取所有可用的股票,这些股票具有某些属性,例如“ ticker”(返回符号)或“ prevDay”(返回前一天的开盘价,最高价,最低价或收盘价)。

我认为问题在于并非所有股票都填充了“ marketcap”数据字段,因此对其进行迭代会返回“ NoneType”错误消息。我正在从内存中键入此内容,因此没有确切的错误消息,但稍后会更新。

1 个答案:

答案 0 :(得分:1)

我将猜测data是某种可迭代的(列表,数据框,矩阵)。 如果是这样,那么第一个条件就是将数据与“无”进行比较。任何可迭代的,甚至只包含None的迭代也不是None。所以第一个条件是真的。

但是第二个条件(如果data是一个numpy数组)是元素式的。因此,我猜测numpy数组中的一个或多个元素为“无”,这就是它失败的原因。

如果这确实是一个numpy数组,则以numpy的方式进行操作:

data_nonnan = data[np.where(~np.isnan(data))]
print(data_nonnan[data_nonnan < 50000])