用于检查变量的内联脚本是否有效的异常处理程序

时间:2016-08-18 12:56:56

标签: python arrays function error-handling exception-handling

我需要添加异常处理,考虑第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

2 个答案:

答案 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循环的条件是输入有意义。