2012-11-16 6 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':)で例外を捕捉することはできませんか? from socket import gethostbyname,gaierrorをしてから試してみてください:

答えて

14

フルモジュールをインポートしない場合は、単に例外をインポートすることもできます。 PEP8はあなたが許可されていると述べています。

from socket import gethostbyname, gaierror 

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

5

この場合、あなたは使うべき

except gaierror: 
    print('oops') 

from socket import gethostbynameために相当します。名前空間からから削除されますので、

import socket 
gethostbyname=socket.gethostbyname 
del socket 

socket、あなたはそれを得るNameError

関連する問題