微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

是否有更简洁的方法来编写此代码?您将如何解决 keyerrors 和 list index 错误?

如何解决是否有更简洁的方法来编写此代码?您将如何解决 keyerrors 和 list index 错误?

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

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

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

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

现在我能够为一家已经在索引上一段时间的公司编写整个代码,但是,我遇到了一些新公司返回 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. 返回一个最终整数,我稍后可以在 if 语句和计算中使用该整数。

我需要 end 变量是整数或浮点数,这就是为什么它看起来像这样。

虽然这对于在索引上有足够年数的公司非常有用,但对于那些没有它返回超出范围的列表索引的公司。

我需要将其作为每个公司的基本模板,而不管它返回什么,但有一个不返回错误解决方案,这样我就不必修复基于公司的每个文件

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

关于 KeyError 问题,我做了以下事情:

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

stock.info

返回一个字典,不错。

然后我正在做这样的事情

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

所以我遇到了一个问题,新公司没有键值整数,比如尾随市盈率

我通过这样做解决了它。

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

这是可行的,但是我随后创建了一个值为 0 或 -1 的变量,该变量不准确,因此可能会使分析产生偏差,因为稍后会在 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 变量的值。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。