В Python, как поймать исключение, которое вы только что подняли? - PullRequest
2 голосов
/ 24 сентября 2011

У меня есть этот кусок кода:

jabberid = xmpp.protocol.JID(jid = jid)
    self.client = xmpp.Client(server = jabberid.getDomain(),
                              debug = [])
    if not self.client.connect():
        raise IOError('Cannot connect to Jabber server')
    else:
        if not self.client.auth(user = jabberid.getNode(),
                                password = password,
                                resource = jabberid.getResource()):
            raise IOError('Cannot authenticate on Jabber server')

Используется xmpppy. Поскольку xmpppy не выдает никаких исключений, если он не может подключиться или аутентифицироваться, я должен сам их выкинуть. Вопрос в том, как мне перехватить те исключения, которые я выбрасываю, для вывода только сообщения об ошибке, но не полного обратного отслеживания, и сохранить работоспособность кода, несмотря на них?

EDIT
Подходит ли эта конструкция?

def raise_error():
    raise IOError('Error ...')

if not self.client.connect():
    try:
        self.raise_error()
    except IOError, error:
        print error

Ответы [ 2 ]

3 голосов
/ 24 сентября 2011

Попробуйте / кроме как со всеми исключениями в Python.Вот пример:

def raise_error():
    raise IOError('Error Message')

print('Before Call.')

try:
    raise_error()
except IOError as error:
    print(error)

print('After Call.')

Редактировать:

Чтобы сделать более реалистичный пример:

def connect_to_client():
    ...
    if time_since_client_responded > 5000:
        raise ClientTimeoutError(client_name+" timed out.")

...
try:
    connect_to_client("server:22")
except ClientTimeoutError as error:
    print(error)
    sys.exit(1)
0 голосов
/ 24 сентября 2011

Использование try: ... except: ....В руководстве по Python объясняется использование этой конструкции здесь .

...