首页 > 解决方案 > 为什么我应该解决时仍然收到“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”(返回前一天的开盘价、最高价、最低价或收盘价)。

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

标签: pythonrestnonetype

解决方案


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

但是第二个条件(如果data是一个 numpy 数组)是元素方面的。所以我猜测 numpy 数组中的一个或多个元素是 None ,这就是它失败的原因。

如果这真的是一个 numpy 数组,那么用 numpy 的方式来做:

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

推荐阅读