python - 比这个嵌套的 try-except 语句更好的方法?
问题描述
我有这个接收国家输入的代码:
flag1 = input("Enter country 1: ")
while not worked:
worked = True
try:
code1 = pycountry.countries.get(name=flag1).alpha_2
except AttributeError:
try:
code1 = pycountry.countries.get(official_name=flag1).alpha_2
except AttributeError:
print("Invalid Input. Visit --- for list of country names.")
flag1 = input()
worked = False
我计划添加另外两种输入国家/地区的方式(通过 2/3 字母代码),因此我将再添加 2 条 try-except 语句。是否有一种更简单、更简单的方法来执行此检查,而不必嵌套其中的 4 个语句?
解决方案
像下面这样的东西可以工作:
lookups = [
lambda x: pycountry.countries.get(name=x).alpha_2,
lambda x: pycountry.countries.get(official_name=x).alpha_2
]
flag1 = input("Enter country 1: ")
worked = False
code1 = None
while not worked:
for lookup in lookups:
try:
code1 = lookup(flag1)
except:
continue
worked = True
break
if not worked:
print("Invalid Input. Visit --- for list of country names.")
flag1 = input()
另一种方法是使用 pycountry 的模糊搜索功能或此处描述的查找功能,它允许您在不指定要搜索的字段的情况下进行搜索。这可能适合您的情况,也可能不适合您的情况。
pycountry.countries.lookup('de')
<pycountry.db.Country object at 0x...>
推荐阅读
- visual-studio - 项目中未提供副本时出现“错误 MSB3030:无法复制文件”
- gis - 如何将 postgis 转换为 OSM?
- sql-server - Dynamics CRM Source 的版本与此版本的 DataFlow 不兼容
- json - 在 json 中插入一个 json 文件
- android - 使用 SimpleXmlConverter 进行改造返回 null
- spring - Spring MVC 中 s:property 的等价物
- python - 不同代码的另一列中从今天到下一个日期的追溯最小工作日
- python - 有什么方法可以加快我在 numpy 上的 Daugman 运算符功能?
- pip - pipenv 安装包失败
- r - 创造时间来改进 r 中的 +1 变量?