Reputation: 803
Hey I'm wondering how to handle specific error codes. For example, [Errno 111] Connection refused
I want to catch this specific error in the socket module and print something.
Upvotes: 28
Views: 66813
Reputation: 2940
This is a very good question, but sadly the answer is quite dissapointing to me at least.
There is no pythonic way to do this.
You'll have to lookup for the error code, but you cannot catch ONLY the code you are looking for. Although you can raise if the errno doesn't match, but still, no pythonic way
Upvotes: 0
Reputation: 4883
If you want to get the error code, this seems to do the trick;
import errno
try:
socket_connection()
except socket.error as error:
if error.errno == errno.ECONNREFUSED:
print(os.strerror(error.errno))
else:
raise
You can look up errno
error codes.
Upvotes: 41
Reputation: 703
I'm developing on Windows and found myself in the same predicament. But the error message always contains the error number. Using that information I just convert the exception to a string str(Exception)
, convert the error code I wanna check for to a string str(socket.errno.ERRORX)
and check if the error code is in the exception.
Example for a connection reset exception:
except Exception as errorMessage:
if str(socket.errno.ECONNRESET) in str(errorMessage):
print("Connection reset")
#etc...
This avoids locale specific solutions but is still not platform independent unfortunately.
Upvotes: 0
Reputation: 6542
On Unix platforms, at least, you can do the following.
import socket, errno
try:
# Do something...
except socket.error as e:
if e.errno == errno.ECONNREFUSED:
# Handle the exception...
else:
raise
Before Python 2.6, use e.args[ 0 ]
instead of e.errno
.
Upvotes: 27
Reputation: 3587
This seems hard to do reliably/portably but perhaps something like:
import socket
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('localhost', 4167))
except socket.error, e:
if 'Connection refused' in e:
print '*** Connection refused ***'
which yields:
$ python socketexception.py
*** Connection refused ***
Pretty yucky though.
Upvotes: 2