2013-03-05 6 views
6

मेरे पास पायथन 3.3 में ब्लॉक को छोड़कर एक कोशिश है, और मैं इसे अनिश्चित काल तक चलाना चाहता हूं।ब्लॉक को छोड़कर दोबारा दोहराने के लिए कैसे करें

try: 
    imp = int(input("Importance:\n\t1: High\n\t2: Normal\n\t3: Low")) 
except ValueError: 
    imp = int(input("Please enter a number between 1 and 3:\n> ") 

वर्तमान में, एक उपयोगकर्ता, एक गैर पूर्णांक यह योजना के अनुसार काम करेगा दर्ज करने के लिए थे लेकिन अगर वे इसे फिर से दर्ज करने के लिए थे, यह सिर्फ ValueError फिर से उठाते हैं और दुर्घटना होगा।

इसे ठीक करने का सबसे अच्छा तरीका क्या है?

उत्तर

12

इसे थोड़ी देर के अंदर रखें और जब आप इनपुट प्राप्त करते हैं तो उसे तोड़ दें। में पर सभी कोड को imp पर निर्भर रखने के लिए शायद सबसे अच्छा है, या NameError को और नीचे रोकने के लिए इसके लिए डिफ़ॉल्ट मान सेट करें।

while True: 
    try: 
    imp = int(input("Importance:\n\t1: High\n\t2: Normal\n\t3: Low")) 

    # ... Do stuff dependant on "imp" 

    break # Only triggered if input is valid... 
    except ValueError: 
    print("Error: Invalid number") 
6
prompt = "Importance:\n\t1: High\n\t2: Normal\n\t3: Low\n> " 
while True: 
    try: 
     imp = int(input(prompt)) 
     if imp < 1 or imp > 3: 
      raise ValueError 
     break 
    except ValueError: 
     prompt = "Please enter a number between 1 and 3:\n> " 

आउटपुट:

[email protected]:~$ python3 test.py 
Importance: 
    1: High 
    2: Normal 
    3: Low 
> 67 
Please enter a number between 1 and 3: 
> test 
Please enter a number between 1 and 3: 
> 1 
[email protected]:~$ 
संबंधित मुद्दे