gpt4 book ai didi

python - 忽略 KeyError 并继续程序

转载 作者:太空狗 更新时间:2023-10-29 19:32:27 25 4
gpt4 key购买 nike

在 Python 3 中,我有一个编码如下的程序。它基本上接受用户的输入并根据字典 (EXCHANGE_DATA) 检查它并输出信息列表。

from shares import EXCHANGE_DATA
portfolio_str=input("Please list portfolio: ")
portfolio_str= portfolio_str.replace(' ','')
portfolio_str= portfolio_str.upper()
portfolio_list= portfolio_str.split(',')
print()
print('{:<6} {:<20} {:>8}'.format('Code', 'Name', 'Price'))
EXCHANGE_DATA = {code:(share_name,share_value) for code, share_name, share_value in EXCHANGE_DATA}
try:
for code in portfolio_list:
share_name, share_value = EXCHANGE_DATA[code]
print('{:<6} {:<20} {:>8.2f}'.format(code, share_name, share_value))
except KeyError:
pass

示例输入:GPG,HNZ,DIL,FRE

输出如下:

Please list portfolio: GPG,HNZ,DIL,FRE

Code Name Price
GPG Guinnesspeat 2.32
HNZ Heartland Nz 3.85
DIL Diligent 5.30
FRE Freightway 6.71

但是如果我有这样的输入:

AIR,HNZ,AAX,DIL,AZX

字典 (EXCHANGE_DATA) 中不存在术语 AAX,AZX,但术语 AIR,HNZ,DIL 存在。该程序显然会抛出 KeyError 异常,但我已使用 pass 中和了它。问题是在 pass 代码执行后程序退出,我需要它继续执行 for 循环 DIL。我该怎么做?

最佳答案

为什么不呢:

 for code in portfolio_list:
try:
share_name, share_value = EXCHANGE_DATA[code]
print('{:<6} {:<20} {:>8.2f}'.format(code, share_name, share_value)
except KeyError:
continue

或检查 dict.get 方法:

 for code in portfolio_list:
res = EXCHANGE_DATA.get(code, None)
if res:
print('{:<6} {:<20} {:>8.2f}'.format(code, *res)

正如@RedBaron 提到的:

 for code in portfolio_list:
if code in EXCHANGE_DATA:
print('{:<6} {:<20} {:>8.2f}'.format(code, *EXCHANGE_DATA[code])

关于python - 忽略 KeyError 并继续程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15653966/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com