我需要添加异常处理,考虑第7行是否失败,因为查询和数组品牌之间没有交集。我是新手使用异常处理程序,并希望得到任何建议或解决方案。
我已经为异常处理编写了一个示例结构,但我不确定它是否可行。
brands = ["apple", "android", "windows"]
query = input("Enter your query: ").lower()
brand = brandSelector(query)
print(brand)
def brandSelector(query):
try:
brand = set(brands).intersection(query.split())
brand = ', '.join(brand)
return brand
except ValueError:
print("Brand does not exist")
# Redirect to main script to enter correct brand in query
答案 0 :(得分:2)
这不是最好的方法,但它是 方式。
def brandSelector(query):
try:
brand = set(brands).intersection(query.split())
brand = ', '.join(brand)
return brand
except ValueError:
print("Brand does not exist")
query = input("Enter your query: ").lower()
brandSelector(query)
brands = ["apple", "android", "windows"]
query = input("Enter your query: ").lower()
brand = brandSelector(query)
print(brand)
您的函数现在是递归的,因为它包含对自身的调用。会发生的是,如果try
抛出错误,则会在提示用户重新定义查询的地方触发except
。然后该功能重新出现。
如果intersection()
没有抛出任何错误,而是返回空容器,则可以执行以下操作:
def brandSelector(query):
brand = set(brands).intersection(query.split())
brand = ', '.join(brand)
return brand
brands = ["apple", "android", "windows"]
brand = None
while not brand:
query = input("Enter your query: ").lower()
brand = brandSelector(query)
print(brand)
这看起来很像 Tuan333的回答。
答案 1 :(得分:2)
当查询来自用户的输入时,尤其是当您希望用户输入错误数据时,我倾向于将查询功能置于无限循环中,并在输入数据有意义时突破。作为Ev。 Kounis指出,有很多方法可以做到这一点。这是我要做的一种方式(未经测试的代码):
brands = ["apple", "android", "windows"]
def brandSelector(query):
try:
brand = set(brands).intersection(query.split())
brand = ', '.join(brand)
return brand
except ValueError:
print("Brand does not exist")
return None;
brand = None;
while brand is None:
query = input("Enter your query: ").lower()
brand = brandSelector(query)
print(brand)
因此,您可以突破while
循环的条件是输入有意义。