#python
Вопрос:
Я создаю практическую систему отправки кошелька/денег, но по какой-то причине, когда commands[3] or commands[4]
вы находитесь вне зоны действия, она не активирует мое заявление «если except
» в заявлении. Когда я печатаю e
, он печатается как "list index out of range"
.
Почему e
печатается как "link index out of range"
, но когда я запускаю if e == "link index out of range"
его, он возвращается False
?
if command_keyword == "send":
try:
globals()[commands[2]].send_funds(globals()[commands[3]], int(commands[1]))
except Exception as e:
if e == 'list index out of range':
print("'send' command requires three arguments. 'send [amount] [sender] [recipient]'")
Комментарии:
1. Потому что инструкция print вызывает внутреннюю
__str__
функцию объекта e. Попробуйте использоватьif str(e) == "link index out of range"
, если это то, что вы хотите сделать. Но вам действительно следует выделитьIndexError
это в отдельныйexcept
блок от других исключений, а не пытаться интерпретировать сообщение об ошибке.
Ответ №1:
Это связано с тем, что тип исключения является IndexError
, а информация является атрибутом исключения. Лучший способ справиться с таким исключением-это
if command_keyword == "send":
try:
globals()[commands[2]].send_funds(globals()[commands[3]], int(commands[1]))
except IndexError:
print("'send' command requires three arguments. 'send [amount] [sender] [recipient]'")
Однако, если вы действительно хотите проверить сообщение вместо этого, вы можете получить его через e.args
if command_keyword == "send":
try:
globals()[commands[2]].send_funds(globals()[commands[3]], int(commands[1]))
except Exception as e:
if e.args[0] == 'list index out of range':
print("'send' command requires three arguments. 'send [amount] [sender] [recipient]'")
Однако обратите внимание, что это небезопасно, поскольку не у каждого исключения есть аргумент, и доступ e.args[0]
может привести IndexError
к ошибке.