首页 > 解决方案 > 比这个嵌套的 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 个语句?

标签: pythontry-except

解决方案


像下面这样的东西可以工作:

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...>

推荐阅读