jev*_*ans 9 python dictionary python-3.x
在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
Run Code Online (Sandbox Code Playgroud)
输入示例:
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
Run Code Online (Sandbox Code Playgroud)
但如果我有一个输入,如:
AIR,HNZ,AAX,DIL,AZX
其中术语AAX,AZX
不存在于字典(EXCHANGE_DATA)
,但条款AIR,HNZ,DIL
做.该程序显然会引发KeyError
异常,但我已将其中和pass
.问题是pass
代码执行后程序退出,我需要它继续执行for
循环DIL
.我该怎么做呢?
Art*_*nka 22
为什么不:
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
Run Code Online (Sandbox Code Playgroud)
或检查dict.get方法:
for code in portfolio_list:
res = EXCHANGE_DATA.get(code, None)
if res:
print('{:<6} {:<20} {:>8.2f}'.format(code, *res)
Run Code Online (Sandbox Code Playgroud)
正如@RedBaron所说:
for code in portfolio_list:
if code in EXCHANGE_DATA:
print('{:<6} {:<20} {:>8.2f}'.format(code, *EXCHANGE_DATA[code])
Run Code Online (Sandbox Code Playgroud)
捕获循环中的异常
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
Run Code Online (Sandbox Code Playgroud)
编辑:更Pythonic的方法是首先测试字典是否有该元素
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)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
25291 次 |
最近记录: |