e. printStackTrace 등가 python
나는 그것을 알고 있습니다.print(e)
(여기서 e는 예외입니다)는 발생한 예외를 출력합니다만, 저는 자바와 동등한 python을 찾으려고 했습니다.e.printStackTrace()
발생한 행에 대한 예외를 정확하게 추적하고 전체 트레이스를 인쇄합니다.
에 상당하는 것을 누구라도 가르쳐 주세요.e.printStackTrace()
Python으로요?
import traceback
traceback.print_exc()
실내에서 이 작업을 수행할 수 있습니다.except ...:
차단하면 현재 예외가 자동으로 사용됩니다.상세한 것에 대하여는, http://docs.python.org/library/traceback.html 를 참조해 주세요.
또 있다logging.exception
.
import logging
...
try:
g()
except Exception as ex:
logging.exception("Something awful happened!")
# will print this message followed by traceback
출력:
ERROR 2007-09-18 23:30:19,913 error 1294 Something awful happened!
Traceback (most recent call last):
File "b.py", line 22, in f
g()
File "b.py", line 14, in g
1/0
ZeroDivisionError: integer division or modulo by zero
(프로그램을 정지하지 않고 완전한 트레이스 백을 인쇄하려면 http://blog.tplus1.com/index.php/2007/09/28/the-python-logging-module-is-much-better-than-print-statements/ 에서 http://blog.tplus1.com/index.php/2007/09/28/the-python-logging-module-is-much-better-than-print-statements/ 를 참조해 주세요.
e. printStackTrace 등가 python
Java에서는 다음(docs)을 수행합니다.
public void printStackTrace()
이 폐기 가능 및 역추적을 표준 오류 스트림으로 인쇄합니다.
이것은 다음과 같이 사용됩니다.
try
{
// code that may raise an error
}
catch (IOException e)
{
// exception handling
e.printStackTrace();
}
Java에서는 표준 오류 스트림이 버퍼 해제되어 출력이 즉시 도착합니다.
Python 2의 동일한 의미는 다음과 같습니다.
import traceback
import sys
try: # code that may raise an error
pass
except IOError as e: # exception handling
# in Python 2, stderr is also unbuffered
print >> sys.stderr, traceback.format_exc()
# in Python 2, you can also from __future__ import print_function
print(traceback.format_exc(), file=sys.stderr)
# or as the top answer here demonstrates, use:
traceback.print_exc()
# which also uses stderr.
파이썬 3
Python 3에서는 예외 객체에서 직접 트레이스백을 얻을 수 있습니다(스레드 코드에 대해 더 잘 동작합니다).또한 stderr은 라인 버퍼링되지만 print 함수는 flush 인수를 취득하기 때문에 이것은 stderr에 즉시 인쇄됩니다.
print(traceback.format_exception(None, # <- type(e) by docs, but ignored
e, e.__traceback__),
file=sys.stderr, flush=True)
결론:
따라서 Python 3에서는traceback.print_exc()
단,sys.stderr
디폴트로는는 출력을 버퍼링하기 때문에 손실될 수 있습니다.따라서 Python 3에서 가능한 동등한 의미론을 얻으려면print
와 함께flush=True
.
다른 훌륭한 답변에 덧붙여, Python을 사용할 수 있습니다.logging
라이브러리의debug()
,info()
,warning()
,error()
,그리고.critical()
방법들.Python 3.7.4 관련 문서를 인용하면,
검사되는 kwargs에는 exc_info라는3개의 키워드 인수가 있습니다.exc_info는 false로 평가되지 않을 경우 로그 메시지에 예외 정보가 추가됩니다.
이것은 Python을 사용할 수 있다는 것을 의미합니다.logging
출력하는 라이브러리debug()
또는 기타 유형의 메시지 및logging
라이브러리는 스택트레이스를 출력에 포함합니다.이 점에 유의하여 다음 작업을 수행할 수 있습니다.
import logging
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
def f():
a = { 'foo': None }
# the following line will raise KeyError
b = a['bar']
def g():
f()
try:
g()
except Exception as e:
logger.error(str(e), exc_info=True)
출력:
'bar'
Traceback (most recent call last):
File "<ipython-input-2-8ae09e08766b>", line 18, in <module>
g()
File "<ipython-input-2-8ae09e08766b>", line 14, in g
f()
File "<ipython-input-2-8ae09e08766b>", line 10, in f
b = a['bar']
KeyError: 'bar'
언급URL : https://stackoverflow.com/questions/9555133/e-printstacktrace-equivalent-in-python
'programing' 카테고리의 다른 글
PHP에서 현재 기능을 실행하는 코드 라인 및 파일을 가져오시겠습니까? (0) | 2022.10.30 |
---|---|
다른 Ajax 내의 vue js가 데이터를 가져오지만 보기를 렌더링하지 않습니다. (0) | 2022.10.30 |
문자열에 숫자만 포함되어 있는지 확인합니다. (0) | 2022.10.30 |
Jackson + Builder pattern? (0) | 2022.10.30 |
x초마다 메서드를 호출하려면 어떻게 해야 합니까? (0) | 2022.10.30 |