有没有一种更简洁的方法来编写这段代码,您将如何解决键错误和列表索引错误?

Is there a cleaner way to write this code and how would you get around keyerrors and list index errors?

我对实际编码还很陌生 Python。

我正在为自己开发一个股票程序,这是我的第一个 Python 挑战。

在 3000 多行代码和 9 秒的延迟打印我的分析之后,我已经完成了分析一只股票的基本代码。

我目前在 Jupyter Notebook 中工作,我的所有代码都在同一个工作簿中,因此不导入模块或工作簿。

现在我能够为一家已经在索引中一段时间​​的公司编写完整的代码,但是,我 运行 遇到一些新公司的问题 returning None 值和索引不在列表中。

到目前为止,我已经能够解决所有问题,但是可能是时候寻求一些意见了,因为我相当确定我的代码已经臃肿,并且必须有比我目前拥有的。

比如我有这样的代码

stock_eps = get_earnings_history('STOCK')
stock_latest_eps4 = stock_eps[4]
stock_latest_eps4_rate = stock_latest_eps4["epsactual"]
stock_latest_eps4_date = stock_latest_eps4["startdatetime"]

stock_eps 是一个列表。

我用它来:

  1. 打印每股收益和日期以及
  2. 到 return 我以后可以在 if 语句和计算中使用的最终整数。

我需要结束变量是整数或浮点数,这就是它看起来像这样的原因。

虽然这对于在索引中有足够年数的公司非常有用,但对于那些没有的公司来说return列表索引超出范围。

我需要它作为每家公司的基本模板,无论它 return 是什么,但有一个没有 return 错误的解决方案,这样我就不必修复每个文件都基于公司。

所以我需要每个变量都有一个不会中断的实际数字。

关于 KeyError 问题,我做了以下操作:

例如,我正在导入一些数据,例如:

stock.info

return这是一本字典,亲爱的。

然后我在做这样的事情

mapping = stock.info
stock_sec = mapping['sector'] #Company Sector

所以我 运行 遇到了新公司没有键值整数的问题,例如 Trailing P/E

我这样做解决了。

if isinstance(stock_tep, type(None)):
    stock_tep = "-1"
else:
    pass

这行得通,但是我创建了一个值为 0 或 -1 的变量,该值不准确,因此可能会扭曲分析,因为许多变量稍后用于 if 语句,其中 if 0 等于某个数字这可能不准确。当我想使用那个变量时,我可以稍后通过添加更多代码来解决这个问题,但是必须有更好的方法来处理这个问题吗?

当检查可能有或没有特定键的字典时,可以使用 get 方法避免 KeyError:

stock_latest_eps4_date = stock_latest_eps4["startdatetime"]

stock_latest_eps4_date = stock_latest_eps4.get("startdatetime")

stock_latest_eps4_date = stock_latest_eps4.get("startdatetime", default_value)

如果字典 stock_latest_eps4 包含关键字 startdatetime,这三个将具有完全相同的效果。

如果stock_latest_eps4包含键startdatetime,那么第一个会引发异常,第二个会给你None ,最后一个会给你 default_value 变量的值。