2016-11-23 11 views
9

में "बहुत व्यापक अपवाद खंड" चेतावनी से बचें मैं एक स्क्रिप्ट के शीर्ष स्तर पर एक अपवाद खंड लिख रहा हूं, और मैं बस यह भी लॉग इन करना चाहता हूं कि जो भी त्रुटियां हों। कष्टप्रद, PyCharm शिकायत करता है अगर मैं सिर्फ Exception पकड़ता हूं।PyCharm

import logging 

logging.basicConfig() 

try: 
    raise RuntimeError('Bad stuff happened.') 
except Exception: # <= causes warning: Too broad exception clause 
    logging.error('Failed.', exc_info=True) 

क्या इस हैंडलर में कुछ गड़बड़ है? यदि नहीं, तो मैं PyCharm को इसके बारे में चुप रहने के लिए कैसे कह सकता हूं?

+0

यदि आप चेतावनियां बंद करना चाहते हैं तो वे सेटिंग में पाए जा सकते हैं। मेरा मानना ​​है कि आप उन सटीक त्रुटियों की खोज कर सकते हैं जिन्हें आप बदलना चाहते हैं। –

+0

धन्यवाद, @AugustWilliams, लेकिन मैं सिर्फ PyCharm को बताना चाहता हूं कि यह कोशिश/ब्लॉक को छोड़कर अच्छा है। मैं अभी भी अन्य ब्लॉक के बारे में शिकायत करना चाहता हूं, अगर वे लॉगिंग नहीं कर रहे हैं या अपवाद से ठीक से निपट रहे हैं। –

+0

मुझे इस घटना या कुछ ऐसा अनदेखा करने के बारे में कहीं याद रखना याद है। याद नहीं है कि यह बटन कहां था, क्षमा करें। –

उत्तर

8

Joran द्वारा एक टिप्पणी से: आप # noinspection PyBroadException का उपयोग PyCharm है कि आप इस अपवाद खंड के साथ ठीक कर रहे हैं बताने के लिए कर सकते हैं। यही वह है जिसे मैं मूल रूप से ढूंढ रहा था, लेकिन मुझे सुझाव मेनू में suppress the inspection का विकल्प याद आया।

import logging 

logging.basicConfig() 

# noinspection PyBroadException 
try: 
    raise RuntimeError('Bad stuff happened.') 
except Exception: 
    logging.error('Failed.', exc_info=True) 
1

मैंने पाया इस में एक संकेत PyCharm लिए बंद कर दिया feature request:

मैं सुझाव है कि आप 'ठीक है' के रूप में इस निरीक्षण चिह्नित करने के लिए करता है, तो ब्लॉक को छोड़कर अपवाद उदाहरण e के उपयोग किसी भी तरह बना देता है।

क्योंकि मैं exc_info=True साथ लॉगिन कर रहा हूं, मैं परोक्ष वर्तमान अपवाद वस्तु का उपयोग कर रहा है, लेकिन PyCharm कि पता नहीं है। इसे स्पष्ट करने के लिए, मैं कुछ हैकी कुछ कर सकता हूं: exc_info लॉग में स्टैक ट्रेस शामिल करने के लिए किसी भी सत्य मूल्य का उपयोग कर सकते हैं। एक अपवाद वस्तु सत्य होना चाहिए, क्योंकि यह None नहीं है।

import logging 

logging.basicConfig() 

try: 
    raise RuntimeError('Bad stuff happened.') 
except Exception as e: 
    logging.error('Failed.', exc_info=e) 
+0

यह बाद में इस कोड को पढ़ने वाले किसी को भी भ्रामक रूप से भ्रामक होने जा रहा है। – user2357112

+0

आप 'प्रयास नहीं' के ठीक ऊपर '# noinspection PyBroadException' भी जोड़ सकते हैं:' यह pycharm (और शायद अन्य आईडीई है कि आप इसे बहुत व्यापक जानते हैं और आप इसके साथ ठीक हैं) –