2016-08-18 24 views
-1

我需要添加異常處理,該異常處理考慮了第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

你確定拋出的錯誤是'ValueError'類型嗎? –

+0

好點,@ Ev.Kounis,注意如果你相交兩個不相交的集合(第7行),答案是空的,而不是ValueError。也許你應該考慮拋出一個自定義異常? – TuanDT

+0

@ Tuan333雖然空並不是一個錯誤,所以如果沒有'try-except'塊,你的腳本就能正常工作,因爲'brand'實際上是'None'。 –

回答

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。然後函數reran。


如果沒有錯誤被拋出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的答案。

+0

感謝您的支持!一些調整你的解決方案已經奏效! :-) –

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循環的條件爲:輸入有意義。

+0

謝謝你的支持! –

相關問題