Прямо сейчас я улавливаю исключение в предложении except Exception:
и делаю print(exception)
. Результат не дает никакой информации, поскольку он всегда печатает <class 'Exception'>
. Я знал, что это работает на python 2, но как это сделать в python3?
Как распечатать исключение в Python 3?
Ответ 1
Я предполагаю, что вам нужно назначить Exception
переменной. Как показано в учебнике Python 3:
def fails():
x = 1 / 0
try:
fails()
except Exception as ex:
print(ex)
Чтобы дать краткое объяснение, as
- это ключевое слово псевдоопределения, используемое в некоторых составных операторах для назначения или псевдонимы предыдущего оператора переменной.
В этом случае as
присваивает исключенное исключение переменной, позволяющей информацию об исключении хранить и использовать позже, вместо того, чтобы немедленно обращаться с ней. (Это подробно обсуждается в Справочник по языку Python 3: инструкция try
.)
Другим составным выражением с помощью as
является оператор with
:
@contextmanager
def opening(filename):
f = open(filename)
try:
yield f
finally:
f.close()
with opening(filename) as f:
# ...read data from f...
Здесь операторы with
используются для обертывания выполнения блока методами, описанными контекстными менеджерами. Это работает как расширенный оператор try...except...finally
в аккуратном пакете генераторов, а оператор as
присваивает полученному генератором результат от диспетчера контекста переменной для расширенного использования.
(Это подробно обсуждается в Справочник по языку Python 3: инструкция with
.)
Наконец, as
можно использовать при импорте модулей, чтобы псевдоним модуля отличался (обычно короче):
import foo.bar.baz as fbb
Это подробно обсуждается в Справочник по языку Python 3: инструкция import
.
Ответ 2
Это изменения со времен Python 2:
try:
1 / 0
except Exception as e: # (as opposed to except Exception, e:)
# ^ that will just look for two classes, Exception and e
# for the repr
print(repr(e))
# for just the message, or str(e), since print calls str under the hood
print(e)
# the arguments that the exception has been called with.
# the first one is usually the message. (OSError is different, though)
print(e.args)
Вы можете заглянуть в стандартный библиотечный модуль traceback для более интересных вещей.
Ответ 3
Попробуйте
except Exception as e:
print(e)