2013-09-06 2 views
2

python3 프로그램에서 특정 메서드에서 발생하는 예외가 발생한 list에 예외를 저장하는 특정 try...except 블록이 있습니다. 단순화 된 버전은 다음과 같습니다 메서드가 반환 내가 콘솔에서 오류를 인쇄 할추적을 사용하여 예외를 저장하고 인쇄 하시겠습니까?

def the_method(iterable): 
    errors = [] 
    for i in iterable: 
     try: 
      something(i) 
     except Exception as e: 
      errors.append(e) 
    return errors 

후. 추적을 사용하여 예외를 인쇄하려면 어떻게해야합니까? 일반 예기치 않은 예외 서식을 인쇄 할 수 있습니까?

답변

2

찾을 수 있습니다. 인터페이스는 고대이므로, type(exc)exc.__traceback__을 사용하는 것을 모릅니다. 당신은 그 (것)들을 추출해야 할 것이다 :

for exc in errors: 
    traceback.print_exception(type(exc), exc, exc.__traceback__) 
+0

이것은 정확히 내가 찾고있는 것 같습니다! – OdraEncoded

0

는 파이썬에서 다른 객체처럼,

def the_method(iterable): 
    errors = [] 
    for i in iterable: 
     try: 
      something(i) 
     except Exception as e: 
      errors.append(e) 
    return errors 

err = the_method(iterable) 
for e in err: 
    print e() 
+0

아니요. 예외의 첫 부분 만 출력합니다. 예기치 않은 예외가 인쇄되는 방식과 같이 예외 유형 또는 추적을 인쇄하지 않습니다. – OdraEncoded

+0

@OdraEncoded @odraEncoded는 인쇄 할 e() – Hardy

+0

을 인쇄합니다. ** 예외적으로, 인쇄되는 예외는'e'가 아닙니다. – OdraEncoded

0

예외가 속성을 가지고있는 것처럼, print 명령 작업입니다. 예외 속성을 탐색 할 수 있습니다. 다음 예제를 고려하십시오.

>>> try: 
    import some_junk_that_doesnt_exist 
except Exception as error: 
    print(dir(error)) 


['__cause__', '__class__', '__context__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setstate__', '__sizeof__', '__str__', '__subclasshook__', '__suppress_context__', '__traceback__', '_not_found', 'args', 'msg', 'name', 'path', 'with_traceback'] 

즉, 목록의 각 예외에 대해 예외의 속성에 액세스 할 수 있습니다. 따라서, 다음을 수행 할 수 있습니다

except Exception as e: 
    errors.append(e) 

:

나에게 발생
for e in err: 
    print(e.args) 
    print(e.name) 
    print(e.msg) 

한 가지,하지만, 다음 줄은 정말 오류 목록에 하나 개 이상의 예외를 추가하지해야한다는 것입니다 다른 사람이 내가 아는 것보다 잘 알지만 예외는 아닙니다. 항상 (여기서는 여러 개의 특정 예외를 캡처하지 않는 한) 한 가지가 될 것입니까? 당신이 필요로하는

+0

Ok ...하지만 캐치되지 않는 예외와 같은 추적 코드를 사용하여 예외를 인쇄하려면 어떻게해야합니까? – OdraEncoded

+1

'e.with_traceback '은 메소드입니다. 그것은 추적을 설정합니다. – user2357112

+0

좀 더 원하는 것 같습니다. 당신은 아마도'sys.exc_info()'를 원할 것이다. 예를 보려면 http://docs.python.org/3.2/library/traceback.html – erewok

관련 문제