比这个嵌套的 try-except 语句更好的方法?
A better way than this nested try-except statement?
我有这个接收国家输入的代码:
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 的模糊搜索功能或 here 中所述的查找,这样您就可以在不指定要搜索的字段的情况下进行搜索。这可能适合也可能不适合您的案例.
pycountry.countries.lookup('de')
<pycountry.db.Country object at 0x...>
这就是您所需要的。不包含 try-except。
import pycountry
code_1 =''
while True:
flag1 = input("Enter country 1: ")
aux = pycountry.countries.get(name=flag1) or pycountry.countries.get(official_name=flag1)
if aux ==None:
print("Invalid Input. Visit --- for list of country names.")
continue
code1 = aux.alpha_2
break
print(code1)
我有这个接收国家输入的代码:
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 的模糊搜索功能或 here 中所述的查找,这样您就可以在不指定要搜索的字段的情况下进行搜索。这可能适合也可能不适合您的案例.
pycountry.countries.lookup('de')
<pycountry.db.Country object at 0x...>
这就是您所需要的。不包含 try-except。
import pycountry
code_1 =''
while True:
flag1 = input("Enter country 1: ")
aux = pycountry.countries.get(name=flag1) or pycountry.countries.get(official_name=flag1)
if aux ==None:
print("Invalid Input. Visit --- for list of country names.")
continue
code1 = aux.alpha_2
break
print(code1)