有没有一种更干净的方法来编写此代码,以及如何避免键错误和列表索引错误?

2024-09-29 22:31:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我对实际编写Python代码相当陌生

我正在为自己编写一个股票计划,作为我的第一个Python挑战

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

我现在在Jupyter笔记本中工作,我所有的代码都在同一个工作簿中,所以不导入模块或工作簿

现在,我能够为一家已经在索引上有一段时间的公司编写整个代码,但是,我遇到了一些问题,新公司没有返回值,索引不在列表中

到目前为止,我已经能够解决所有的问题,但是可能是时候寻求一些输入了,因为我相当确定我的代码已经过多了,必须有比我目前拥有的更好的方法来编写它

例如,我有这样的代码

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语句和计算中使用它

我需要结束变量是一个整数或浮点,这就是为什么它看起来像这样

虽然这对一家拥有足够年资的公司来说非常有效,但对于那些没有年资的公司来说,它会返回超出范围的列表索引

我需要它成为每个公司的基础模板,不管它返回什么,但它的解决方案不会返回错误,这样我就不必根据公司修复每个文件

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

关于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,则等于某个可能不准确的数字。当我想使用这个变量时,我可以通过添加更多的代码来解决这个问题,但是必须有更好的方法来处理这个问题吗


Tags: 方法代码info列表ifstock公司数字
1条回答
网友
1楼 · 发布于 2024-09-29 22:31:31

检查可能有或可能没有某个键的词典时,可以使用get方法避免KeyError:

stock_latest_eps4_date = stock_latest_eps4["startdatetime"]

vs

stock_latest_eps4_date = stock_latest_eps4.get("startdatetime")

vs

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

如果字典stock_latest_eps4包含键startdatetime,则这三个键的效果完全相同

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

相关问题 更多 >

    热门问题