10

通常、インポートした場合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':か?

4

2 に答える 2

26

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

from socket import gethostbyname, gaierror

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

于 2012-11-16T09:00:02.010 に答える
6

この場合、:を使用してから:from socket import gethostbyname,gaierrorを試してください。

except gaierror:
    print('oops')

これfrom socket import gethostbynameは、次と同等であるためです。

import socket
gethostbyname=socket.gethostbyname
del socket

したがってsocket、名前空間から削除され、それを取得しNameErrorます。

于 2012-11-16T08:57:12.990 に答える