2012-11-16 21 views
5

आम तौर पर, अगर मैं socket आयातित, मैं आसानी से अपवाद को पकड़ने के लिए सक्षम हो जाएगा:मैं ऐसे मॉड्यूल के लिए अपवाद कैसे प्राप्त करूं जिसे मैंने पूरी तरह से आयात नहीं किया है?

>>> import socket 
>>> try: 
...  socket.gethostbyname('hello') 
... except socket.gaierror: 
...  print('oops') 
... 
oops 

लेकिन अगर मैं सिर्फ socket.gethostbyname आयात करते हैं, यह काम नहीं करेगा:

>>> from socket import gethostbyname 
>>> try: 
...  gethostbyname('hello') 
... except socket.gaierror: 
...  print('oops') 
... 
Traceback (most recent call last): 
    File "<stdin>", line 3, in <module> 
NameError: name 'socket' is not defined 

मैं भी एक NameError मिल अगर मैं gaierror पकड़ने की कोशिश करता हूं।

क्या इसके लिए कोई कामकाज है? क्या स्ट्रिंग के साथ अपवाद पकड़ना संभव नहीं है (उदाहरण के लिए except 'socket.gaierror':)?

उत्तर

14

यदि आप पूर्ण मॉड्यूल आयात नहीं करना चाहते हैं तो आप बस अपवाद भी आयात कर सकते हैं। पीईपी 8 कहता है कि आपको करने की अनुमति है।

from socket import gethostbyname, gaierror 

http://www.python.org/dev/peps/pep-0008/#imports

5

इस मामले में आप का उपयोग करना चाहिए: from socket import gethostbyname,gaierror और फिर प्रयास करें:

except gaierror: 
    print('oops') 

है कि क्योंकि from socket import gethostbyname के बराबर है:

import socket 
gethostbyname=socket.gethostbyname 
del socket 
तो

socket नाम स्थान से हटा दिया जाता है और आपको लगता है कि मिल NameError