Question: I currently have code of the format

```
try:
    ....
except(HTTPError, URLError, socket.error) as e:
    print "error({0}):{1}".format(e.errno, e.strerror)
continue

```

But want to know which of the three triggered the exception. Is there a way to do this in python?

Answer: 
If it's important for you to *react differently* then you should catch them individually:

```
try:
    do_something()
except HTTPError:
    handle_HTTPError()
except URLError:
    handle_URLError()
except socket.error:
    handle socketerror()

```

But if you only mean that you want to display or log the error type along with its arguments, you should be using the `repr` of the error instead of trying to format it yourself. For example:

```
>>> try:
...     raise IOError(911, "Ouch!")
... except IOError as e:
...     print "error({0}):{1}".format(e.errno, e.strerror)
...     print repr(e)
...
error(911):Ouch!
IOError(911, 'Ouch!')

```

In terms of the information displayed, there's very little difference between the printed string you put together and just going with the `repr`. If you really want a "pretty" message to print or log, you can manipulate the string to your heart's content, but `type(e)` won't save you any effort, it's not intended for display/logging:

```
>>> type(e)
<type 'exceptions.IOError'>

```
```
def exception():
    try:
        //code that could raise a ValueError or TypeError
    except ValueError as e:
        print "ValueError"
    except TypeError as e:
        print "TypeError"

```

Just add more except blocks, each with code specific the a given exception.