तो मैं थोड़ी देर के लिए अजगर सीख रहा हूं और उठाने का कार्य और जोर दे रहा हूं (मुझे क्या एहसास हुआ कि दोनों ही ऐप को दुर्घटनाग्रस्त करते हैं, कोशिश करने के विपरीत - वास्तव में समान) और मैं नहीं कर सकता एक ऐसी स्थिति देखें जहां आप कोशिश पर उठो या दावा का उपयोग करेंगे।राइज कोशिश करें और सम्मिलित करें
उत्तर
जोर:
प्रयुक्त जब आप एक निश्चित स्थिति के आधार पर "रोक" करने के लिए स्क्रिप्ट और वापसी कुछ तेजी से डिबग मदद करना चाहते हैं:
list_ = ["a","b","x"]
assert "x" in list_, "x is not in the list"
print("passed")
#>> prints passed
list_ = ["a","b","c"]
assert "x" in list_, "x is not in the list"
print("passed")
#>>
Traceback (most recent call last):
File "python", line 2, in <module>
AssertionError: x is not in the list
बढ़ाएं:
दो इसके कारण उपयोगी है:
1/कोशिश करने के लिए और ब्लॉक को छोड़कर उपयोग किया जाना चाहिए। अपनी पसंद की त्रुटि बढ़ाएं, नीचे की तरह कस्टम हो सकती है और यदि आप pass
या contiune
स्क्रिप्ट को स्क्रिप्ट को रोक नहीं सकते हैं; या पूर्वनिर्धारित किया जा सकता है त्रुटियों raise ValueError()
class Custom_error(BaseException):
pass
try:
print("hello")
raise Custom_error
print("world")
except Custom_error:
print("found it not stopping now")
print("im outside")
>> hello
>> found it not stopping now
>> im outside
देखा यह नहीं रोका? हम इसे छोड़कर ब्लॉक में बाहर निकलने (1) का उपयोग करके इसे रोक सकते हैं।
2/वृद्धि का उपयोग स्टैक को पास करने के लिए वर्तमान त्रुटि को फिर से शुरू करने के लिए भी किया जा सकता है ताकि यह देखने के लिए कि कुछ और इसे संभाल सकता है या नहीं।
except SomeError, e:
if not can_handle(e):
raise
someone_take_care_of_it(e)
ब्लॉक को छोड़कर कोशिश /:
आप क्या सोचते हैं वास्तव में करता है, कुछ की कोशिश करता है, एक त्रुटि ऊपर आता है आप इसे पकड़ने और इसके साथ सौदा कैसे कभी आप की तरह है। कोई उदाहरण नहीं है क्योंकि ऊपर एक है।
assert cond, "text"
तरह
if cond == False:
raise AssertionError("text")
उपयोग ज़ोर कुछ करने के लिए विस्तारित, क्योंकि यह अधिक पठनीय है।
बहुत बहुत धन्यवाद! अब और अधिक समझ में आता है! – Defneit
लघु और कुरकुरा, धन्यवाद :) –
raise
- एक अपवाद उठाएं।
assert
- अपवाद बढ़ाएं यदि एक दी गई शर्त सत्य है (या नहीं)।
try
- कुछ कोड निष्पादित करें जो अपवाद बढ़ा सकता है, और यदि ऐसा है, तो इसे पकड़ें।
अपवाद हैं जो पाइथन (और कुछ अन्य भाषाएं) कोड निष्पादित करते समय उत्पन्न होने वाली त्रुटियों से निपटने के लिए उपयोग करते हैं। raise ExceptionName
कह रहा है कि कोड में कोई त्रुटि है, और यह निर्दिष्ट करता है कि उस समस्या से जुड़े अपवाद को उठाकर यह किस प्रकार की समस्या है। assert expression
expression
का मूल्यांकन करें और यदि यह गलत है तो अपवाद उठाता है।
try
कोड को निष्पादित करने के लिए उपयोग किया जाता है जो आपके द्वारा अपेक्षित अपवाद को बढ़ा सकता है। कार्यक्रम को रोकने के बजाय, आप अपवाद को "पकड़ सकते हैं" और अपने कोड में इसके साथ सौदा कर सकते हैं।
उदाहरण: मान लीजिए कि आपके पास एक शब्दकोश और एक सूची है।
try:
for item in my_list:
print(my_dictionary[item])
except KeyError as e: #KeyError is the Exception raised when a key is not in a dictionary
print('There is no {} in the dictionary'.format(e.args[0]))
बहुत बहुत धन्यवाद! अब मैं आपको धन्यवाद कोडिंग जारी रख सकता हूं! – Defneit
try/except
ब्लॉक तुम्हें पकड़ और अपवादों का प्रबंधन करते हैं: आप जब तक आप एक है कि शब्दकोश में नहीं है तक पहुँचने के शब्दकोश में सूची से बातें देखने के लिए चाहते हैं। अपवादों को raise
, assert
द्वारा ट्रिगर किया जा सकता है, और बड़ी संख्या में त्रुटियों जैसे कि खाली सूची को अनुक्रमणित करने का प्रयास किया जा सकता है। raise
आमतौर पर तब उपयोग किया जाता है जब आपको त्रुटि स्थिति मिली है। assert
समान है लेकिन अपवाद केवल तभी उठाया जाता है जब कोई शर्त पूरी हो जाती है।
raise
और assert
का एक अलग दर्शन है। कोड में कई "सामान्य" त्रुटियां हैं जिन्हें आप पहचानते हैं और त्रुटियां बढ़ाते हैं। शायद एक वेबसाइट मौजूद नहीं है या पैरामीटर मान सीमा से बाहर है।
दावे आम तौर पर "मैं कसम खाता हूं" मुद्दों के लिए आरक्षित हैं जो वैसे भी होने वाले प्रतीत होते हैं। सामान्य रनटाइम त्रुटि पहचान से रनटाइम डीबगिंग की तरह यह अधिक है। यदि आप ध्वज का उपयोग करते हैं या फ़ाइलों से फ़ाइलों की बजाय फ़ाइलों का उपयोग करते हैं तो उन्हें अक्षम किया जा सकता है, इसलिए उन्हें नियमित त्रुटि का पता नहीं होना चाहिए।
यदि उत्पादन गुणवत्ता कोड एक अपवाद उठाता है, तो पता लगाएं कि आपने क्या किया है। यदि यह AssertionError
उठाता है, तो आपको एक बड़ी समस्या मिली है।
आपको बहुत धन्यवाद। मुझे बहुत मदद मिली – Defneit
जोर आम तौर पर परीक्षण कोड द्वारा किया जाता है सुनिश्चित करने के लिए है कि कुछ काम किया:
def test_bool():
assert True != False
कहाँ के रूप में की कोशिश, बढ़ा और मेकअप अपवाद हैंडलिंग जो अजगर में पसंदीदा तरीका संभाल और त्रुटियों का प्रचार करने के सिवाय।
अधिकांश लाइब्रेरी और पायथन बिल्ट-इन्स उठाएंगे और कुछ गलत होने पर एक प्रकार या किसी अन्य का अपवाद होगा। अक्सर जब आप कुछ गलत होने का पता लगाते हैं तो आप अपने कोड में अपवाद भी उठाना चाहते हैं। मान लें कि एक उदाहरण के रूप में आप एक ईमेल पता सत्यापनकर्ता लिख रहे थे और यदि पता में @ चिह्न नहीं था तो आप अपवाद उठाना चाहते थे। तुम कुछ की तरह (यह खिलौना कोड है वास्तव में इस प्रकार के ईमेल को मान्य नहीं है,) हो सकता है:
def validate_email(address):
if not "@" in address:
raise ValueError("Email Addresses must contain @ sign")
फिर कहीं और अपने कोड में आप validate_email समारोह कॉल कर सकते हैं और अगर यह विफल रहता है एक अपवाद फेंक दिया जाएगा।
try:
validate_email("Mynameisjoe.com")
except ValueError as ex:
print("We can do some special invalid input handling here, Like ask the user to retry the input")
finally:
close_my_connection()
print("Finally always runs whether we succeed or not. Good for clean up like shutting things down.")
जानना महत्वपूर्ण बात है जब एक अपवाद उठाया है यह जब तक यह एक हैंडलर पाता कॉल स्टैक अप पारित हो जाता है। यदि इसे कभी एक हैंडलर नहीं मिलता है तो यह अपवाद और स्टैक ट्रेस के साथ प्रोग्राम को क्रैश करेगा।
if __name__ == '__main__':
try:
print(1/0)
except Exception as ex:
pass
अब आप जानते हुए भी क्यों अपने आवेदन ऊपर विस्फोट से उड़ा दिया का कोई तरीका नहीं:
एक बात आपको बस इतना करना नहीं चाहते की तरह कुछ है।
import logging
if __name__ == '__main__':
try:
print(1/0)
except Exception as ex:
logging.exception(ex)
raise
इस मामले के बाद से यह कोई पैरामीटर वही त्रुटि फिर से उठाती है में उठाने:
एक बात आप अक्सर देखेंगे जो ठीक है की तरह कुछ है। अक्सर वेब कोड में आप ऐसा कुछ देखेंगे जो अपवाद को फिर से नहीं उठाता है क्योंकि यह क्लाइंट को 500 त्रुटि भेज देगा और फिर अगले अनुरोध के साथ आगे बढ़ेगा, इसलिए उस स्थिति में आप प्रोग्राम को समाप्त नहीं करना चाहते हैं।
बहुत बहुत धन्यवाद – Defneit
- 1. PHP एसक्यूएल सम्मिलित करने के लिए कोशिश करें और पकड़ें
- 2. सम्मिलित करें सम्मिलित बनाम जांच
- 3. सम्मिलित करें या इकाई को मर्ज करें और सम्मिलित करें या प्रतिस्थापित करें
- 4. कोशिश करें/पकड़ें और थ्रेडिंग
- 5. कोशिश करें।
- 6. एक सम्मिलित करें ... लार्वेल
- 7. थोक सम्मिलित करें, पोस्टग्रेज़
- 8. तीन.जेएस सम्मिलित करें छवि
- 9. हाइबरनेट पोस्टइन्सर्टएवेंटलिस्टर्स-सम्मिलित लेनदेन को सम्मिलित करें?
- 10. कोशिश करें, कोशिश करें! & प्रयत्न? क्या अंतर है, और प्रत्येक का उपयोग कब करें?
- 11. सभी/थोक सम्मिलित करें
- 12. सम्मिलित करें प्रकार .NET
- 13. PHP MYSQL सम्मिलित करें/अपडेट करें
- 14. पायथन - पिमोंगो सम्मिलित करें और अपडेट करें दस्तावेज़
- 15. नेस्टेड कोशिश करें/पकड़ें
- 16. दोहराव कोशिश करें और खंडों को छोड़कर
- 17. आईफोन में कोशिश करें और पकड़ें?
- 18. जावास्क्रिप्ट कोशिश करें/पकड़ें
- 19. कैच की कोशिश करें
- 20. पाइथन कोशिश करें लैम्बडा
- 21. कोशिश करें ... आखिरकार एमएसबिल्ड
- 22. HIVE सम्मिलित करें जेसन प्रारूप
- 23. सी ++ में कोशिश करें और पकड़ें() का उपयोग क्यों करें?
- 24. पोस्टग्रेएसक्यूएल ट्रिगर सम्मिलित करें या अपडेट करें
- 25. एसक्यूएलबल्ककॉपी या थोक सम्मिलित करें
- 26. SQL सर्वर सम्मिलित करें उदाहरण
- 27. सिद्धांत 2 बैच सम्मिलित करें
- 28. मूल pyodbc थोक सम्मिलित करें
- 29. पायथन + MySQL - थोक सम्मिलित करें
- 30. बाइनरी ट्री सम्मिलित करें एल्गोरिदम
आप मानते हैं कि raise, जोर देने या कोशिश करने के बीच कोई विकल्प है, लेकिन हकीकत में वे एक दूसरे के बदले नहीं हैं। इसके अलावा आपने एक सवाल नहीं पूछा। – tcooc
धन्यवाद tcoc! मेरे पास वास्तव में एक सवाल था, हालांकि, अगर कोई मुझे एक स्थिति दिखा सकता है तो आप केवल इन कार्यों में से किसी एक का उपयोग कर सकते हैं। – Defneit
@Defneit पाइथन दस्तावेज़ों में ऐसे उदाहरण हैं। इसके अलावा आपको प्रश्न में अपने प्रश्न पूछना चाहिए, टिप्पणी में नहीं। – Goyo