Прямо сейчас я улавливаю исключение в предложении 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)