2012-11-16 24 views
5

Thông thường, nếu tôi nhập khẩu socket, tôi sẽ có thể dễ dàng bắt ngoại lệ:Làm cách nào để nhận ngoại lệ cho mô-đun mà tôi chưa nhập đầy đủ?

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

Nhưng nếu tôi chỉ nhập khẩu socket.gethostbyname, nó sẽ không làm việc:

>>> 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 

tôi cũng có được một NameError nếu tôi cố bắt gaierror.

Có cách giải quyết nào cho vấn đề này không? Không thể bắt ngoại lệ với một chuỗi (ví dụ: except 'socket.gaierror':)?

Trả lời

5

Trong trường hợp này bạn nên sử dụng: from socket import gethostbyname,gaierror và sau đó thử:

except gaierror: 
    print('oops') 

đó là bởi vì from socket import gethostbyname tương đương với:

import socket 
gethostbyname=socket.gethostbyname 
del socket 

nên socket được lấy ra từ từ không gian tên và bạn nhận được rằng NameError .

Các vấn đề liên quan