2013-06-27 6 views
6

KeyError 메시지는 다른 오류와 동일한 방식으로 관리되지 않는 것 같습니다. 나는 색상을 사용하려는 경우 예를 들어, 그것은 KeyError에 대한 IndexError하지만 나에 대한 작동합니다 :python raise KeyError 메시지 색상

err_message = '\x1b[31m ERROR \x1b[0m' 

print err_message 

raise IndexError(err_message) 

raise KeyError(err_message) 

어떤 생각을 왜? 그리고 그것을 우회하는 방법이 있습니까? (나중에 catch 할 수있는 타입 KeyError 예외가 필요함)

+2

오류 메시지의 색상을 지정하는 것보다 로깅 출력의 색상을 사용하는 것이 좋습니까? http://stackoverflow.com/questions/384076/how-can-i-color-python-logging-output – BorrajaX

답변

4

이러한 예외 동작은 다릅니다. 가 오버라이드 에 repr와 함께 자신의 클래스를 만듭니다 : KeyError를 메시지와 함께 다음과 같은 행동이에 대해 다음 해결 방법을 사용할 수 있습니다

If args is a tuple of exactly one item, apply repr to args[0]. 
    This is done so that e.g. the exception raised by {}[''] prints 
    KeyError: '' 
    rather than the confusing 
    KeyError 
    alone. The downside is that if KeyError is raised with an explanatory 
    string, that string will be displayed in quotes. Too bad. 
    If args is anything else, use the default BaseException__str__(). 

을 통과하지

예를

class X(str): 
    def __repr__(self): 
     return "'%s'" % self 

raise KeyError(X('\x1b[31m ERROR \x1b[0m')) 

에 대한

하지만 난 정말 돈 ' 이해가 왜 필요한지 ... @BorrajaX 코멘트가 더 나은 해결책이라고 생각합니다.

+0

이 멋진 해결책을 가져 주셔서 감사합니다! 그것은 일을합니다! 로깅을 사용하는 대신 그 대신에 갈 것입니다 ... 내 경우에는 더 쉽게 보입니다! –