Python 忽略键错误并继续程序

Python 忽略键错误并继续程序,python,dictionary,python-3.x,Python,Dictionary,Python 3.x,在Python3中,我有一个编码如下的程序。它基本上接受用户的输入,并根据字典(交换数据)进行检查,然后输出一个信息列表 from shares import EXCHANGE_DATA portfolio_str=input("Please list portfolio: ") portfolio_str= portfolio_str.replace(' ','') portfolio_str= portfolio_str.upper() portfolio_list= portfolio_s

在Python3中,我有一个编码如下的程序。它基本上接受用户的输入,并根据字典(交换数据)进行检查,然后输出一个信息列表

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
但如果我有如下输入:

AIR、HNZ、AAX、DIL、AZX

词典
(交换数据)
中不存在术语
AAX、AZX,但术语
AIR、HNZ、DIL
存在。程序显然会抛出一个
KeyError
异常,但我已经用
pass
抵消了这个异常。问题是在执行了
pass
代码之后,程序退出,我需要它继续执行
DIL上的
for
循环。我该怎么做?

为什么不:

 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
对于公文包列表中的代码:
尝试:
共享名称,共享值=交换数据[代码]

打印(“{:您只需要将
try
/
块移动到for循环中。
捕获循环中的异常

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:
        pass
对于公文包列表中的代码:
尝试:
共享名称,共享值=交换数据[代码]

打印('{:@AshwiniChaudhary当然,Thanxy你也可以通过在交换数据中使用类似于
if code的代码来摆脱try-except-block:#其他:继续
@ArtsiomRudzenka我想传递一个特定的键错误
KeyError:'Retail-Store'
如果这样做的话,我会得到语法错误`除了KeyError:'Retail-Store':pass`或者如果执行此操作,缩进错误`Exception KeyError:'Retail Store'pass`我做错了什么?@ranadan我想你需要执行以下操作:Exception KeyError作为exc:if'Retail Store'在exc中。消息:pass else:raise exc你可以在个人资料中找到我的skype,这样我就可以帮助你了解更多示例。你不必使用“pass”而不是“continue”当continue进入下一次迭代时,它肯定不是更像Python的方式,许多Python学者更喜欢第一种方式,因为请求原谅比请求允许更好。@RedBaron我不同意,而且这种情况略有不同,反正Python一词没有明确的定义。它只是”请求原谅比请求允许更好“避免对您接受的内容太过严格,但在本例中,…测试中的代码并不是太严格,也不是太清晰。对每个人来说,有许多方法可以做同样的事情:)
 for code in portfolio_list:
     res = EXCHANGE_DATA.get(code, None)
     if res:
         print('{:<6} {:<20} {:>8.2f}'.format(code, *res)   
 for code in portfolio_list:
     if code in EXCHANGE_DATA:
         print('{:<6} {:<20} {:>8.2f}'.format(code, *EXCHANGE_DATA[code])   
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:
        pass
for code in portfolio_list:
    if code in EXCHANGE_DATA:
        share_name, share_value = EXCHANGE_DATA[code]
        print('{:<6} {:<20} {:>8.2f}'.format(code, share_name, share_value)