2014-02-25 18 views
1
if city == 'Chennai': 
    print "this is Chennai city" 
elif city == 'Delhi': 
    print "this is Delhi city" 
else: 
    print "invalid city" 

每當城市無效時,我想提高ValueError。怎麼做 ?提高多個if-else的值錯誤

回答

2

我重構你的代碼一點點,但它說明了如何提高一個ValueError

def validate_city(city): 
    city = city.title() # Capitalize properly 
    # use set(["Pune", "Delhi"]) for backwards-compatibility 
    valid_cities = {"Pune", "Delhi"} 
    if city in valid_cities: 
     print "This is %s city" % city 
    else: 
     raise ValueError("Invalid city %s" % repr(city)) 

輸出示例:

>>> validate_city("gotham city") 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "<stdin>", line 7, in validate_city 
ValueError: Invalid city 'Gotham City' 
>>> validate_city("delhi") 
This is Delhi city 

注:

  • 一組用於查找建立有效的城市,這比更多的if語句更容易維護。
  • 一套是faster for lookups than a list
  • title()方法用於正確使城市名稱大寫。在驗證之前正常化用戶輸入是一種很好的做法。即把「德赫利」變成「德里」,「紐約」變成「紐約」等等。
+0

它沒有顯示ValueError異常味精 – Patrick

+0

它爲我工作。你能發佈你正在運行的確切代碼,包括你的測試輸入嗎? –

+0

如果你在'try/catch'塊中,這個錯誤可能會被丟棄。 –

3
city = 'some city' 

if city == 'Pune': 
    print "this is pune city" 
elif city == 'Delhi': 
    print "this is Delhi city" 
else: 
    raise ValueError("Invalid City") 

Traceback (most recent call last): 
    File "<pyshell#2>", line 8, in <module> 
    raise ValueError('Invalid City') 
ValueError: Invalid City 
+0

您的代碼在城市無效時顯示msg「無效城市」 – Patrick

+0

它會引發異常。你的劇本顯示什麼? –

+0

它沒有顯示任何內容 – Patrick

0

這取決於您希望如何處理情況。然而你會使用命令

raise ValueError 

點在哪裏,你確定這是一個無效的城市

validcities = ('Pune', 'Delhi', 'Any other valid city') 

try: 
    if city not in validcities: 
    raise ValueError 
    print 'This is', city, 'city' 
except ValueError: 
    print city, ' is an invalid city' 
    # perform other invalid city here