आप try
कथन के दो रूप हैं। उनके बीच मुख्य अंतर यह है कि try1_stmt
के मामले में except
खंड निर्दिष्ट होना चाहिए।
Introduction | Notation अजगर भाषा संदर्भ के में, निम्न लिखा है:
एक सितारा (*) शून्य या अधिक repetitions के पूर्ववर्ती आइटम के का मतलब है, इसी तरह, एक प्लस (+) एक या अधिक repetitions का मतलब है, और एक वाक्यांश वर्गाकार कोष्ठक में ([]) शून्य का मतलब है या एक घटनाओं (दूसरे शब्दों में, संलग्न वाक्यांश वैकल्पिक है)। * और + ऑपरेटर यथासंभव कसकर बांधते हैं; ब्रांड्स का उपयोग समूह के लिए किया जाता है।
तो, विशेष रूप से, पहले के रूप में:
try1_stmt ::= "try" ":" suite
("except" [expression [("as" | ",") identifier]] ":" suite)+
["else" ":" suite]
["finally" ":" suite]
else
और finally
खंड वैकल्पिक ([])
, आप केवल एक try
बयान और एक या अधिक (+)
except
खंड की आवश्यकता होती है ।
दूसरा रूप में:
try2_stmt ::= "try" ":" suite
"finally" ":" suite
आप केवल एक भी try
और कोई except
खंड के साथ एक एकल finally
खंड की है।
ध्यान दें कि पहले मामले के लिए दूसरे के आदेश और आखिरकार खंड तय किए गए हैं।else
क्लॉज finally
क्लॉज परिणाम SyntaxError
में परिणाम।
दिन के अंत में, यह सब अनिवार्य रूप से नहीं केवल एक else
खंड के साथ मिलकर एक try
खंड है करने में सक्षम होने के लिए निर्भर करता है। तो कोड के रूप में इन दोनों की अनुमति है:
कोशिश बयान (try1_stmt
) सबसे पहले प्रपत्र:
try:
x = 1/0
except ZeroDivisionError:
print("I'm mandatory in this form of try")
print("Handling ZeroDivisionError")
except NameError:
print("I'm optional")
print("Handling NameError")
else:
print("I'm optional")
print("I execute if no exception occured")
finally:
print("I'm optional")
print("I always execute no matter what")
दूसरा फार्म (try2_stmt
):
try:
x = 1/0
finally:
print("I'm mandatory in this form of try")
print("I always execute no matter what")
एक आसान के लिए इस विषय पर पीईपी पढ़ने के लिए, PEP 341 देखें जिसमें दो रूपों के लिए मूल प्रस्ताव शामिल है try
कथन का।
ब्रैकेट का मतलब वैकल्पिक है। 'को छोड़कर 'पर अभिभावकों का उपयोग' + 'के साथ समूहबद्ध करने के लिए किया जाता है (क्योंकि' छोड़कर 'उस रूप में एक से अधिक बार हो सकता है)। – ShadowRanger