यह बहुत hackish है, लेकिन मैं इसे का उपयोग किया है प्रॉम्प्ट पर जब मैं डिबगिंग के लिए गतिविधियों का क्रम ऊपर लिखना चाहते थे:
exec "try: some_problematic_thing()\nexcept: problem=sys.exc_info()"
print "The problem is %s" % problem[1]
अधिकांश भाग के लिए, मैं नहीं कर रहा हूँ बिना किसी एकल-लाइन-कोशिश-प्रतिबंधित प्रतिबंध को लेकर परेशान, लेकिन जब मैं बस प्रयोग कर रहा हूं और मैं इंटरैक्टिव दुभाषिया में एक बार कोड के पूरे हिस्से को याद करने के लिए रीडलाइन चाहता हूं ताकि मैं इसे किसी भी तरह समायोजित कर सकूं, यह छोटा चाल आसान काम में आता है।
वास्तविक उद्देश्य के लिए आप पूरा करने की कोशिश कर रहे हैं, तो आप locals().get('c', b)
आज़मा सकते हैं; आदर्श रूप से स्थानीय संदर्भ के बजाय वास्तविक शब्दकोश का उपयोग करना बेहतर होगा, या जो कुछ भी हो सकता है या इसे सेट नहीं कर सकता है, उसे चलाने से पहले किसी को भी निर्दिष्ट नहीं करना चाहिए।
>>> with trial: a = 5 # will be executed normally
>>> with trial: a = 1/0 # will be not executed and no exception is raised
>>> print a
5
कोई अपवाद एक क्रम के मामले में बढ़ा दी जाएगी:
class trialContextManager:
def __enter__(self): pass
def __exit__(self, *args): return True
trial = trialContextManager()
फिर एक ही पंक्ति में त्रुटियों को अनदेखा करने के लिए with
बयान का उपयोग करें:
स्रोत
2011-11-09 06:26:30
धन्यवाद। समस्या यह है कि यह वास्तव में एक django model.objects.get क्वेरी मैं परीक्षण करने की कोशिश कर रहा हूँ। अगर कोई डेटा नहीं मिलता है तो .get एक त्रुटि देता है ... यह वापस नहीं लौटाता है (जो मुझे परेशान करता है) – Brant
@ ब्रेंट, तो आप त्रुटि क्यों नहीं पकड़ सकते? एक लाइन क्यों? –
@ ब्रेंट, ठीक है, यह स्थिति जांचने से थोड़ा अलग है कि एक चर सेट है (पायथन में कोई चर घोषित नहीं किया गया है)। पाइथन में सामान्य शैली त्रुटियों को मानने के लिए अपवादों को बढ़ाने के लिए अपवादों को प्राथमिकता देना पसंद करती है, जिनमें से हम में से कई वास्तव में प्यार करते हैं। हर बार एक ऑपरेशन के रिटर्न कोड की जांच करने और त्रुटियों को ट्रैक करने में कठिन समय होने पर यदि मैं कुछ नहीं करता तो मुझे निश्चित रूप से पायथन लिखते समय सी के बारे में याद नहीं आती है। किसी भी घटना में, हालांकि इस पर चर्चा की गई है, 'ब्लॉक' को छोड़कर 'try' /' के लिए कोई भी लाइन सिंटैक्स नहीं है। सौभाग्य से लाइनें सस्ते हैं, इसलिए 4-लाइन समाधान आपके लिए काम करना चाहिए। ;-) –