pzrq의 게시물은 다음을 사용한다고 말합니다.
str(e)
이것이 바로 내가 필요한 것입니다.
(유니 코드 환경에있는 경우 다음과 같이 나타납니다.
unicode(e)
작동하며 유니 코드가 아닌 환경에서 제대로 작동하는 것으로 보입니다)
Pzrq는 다른 좋은 것들을 많이 말했지만 모든 좋은 것들 때문에 답변을 거의 놓쳤습니다. 50 점이 없기 때문에 간단한 해결책에주의를 기울이려는 답변에 대해 언급 할 수 없으며 15가 없으므로 답변을 투표 할 수는 없지만 게시 할 수는 있습니다 (뒤로 느낀다. 오 잘)-그래서 여기에 게시하고 있습니다-아마도 그 점을 잃을 것입니다 ...
내 요점은 pzrq의 답변에주의를 기울이는 것이기 때문에 아래의 모든 부분에서 눈 부시지 말고 놓치지 마십시오. 이 게시물의 처음 몇 줄이 가장 중요합니다.
내 이야기:
내가 여기에 왔던 문제는 당신이 통제 할 수없는 클래스에서 예외를 잡으려는 경우였습니다. 가능한 모든 예외에서 메시지를 얻을 수 있도록 코드에서 사용하는 모든 가능한 클래스를 서브 클래스 화하지 않을 것입니다!
나는 사용하고 있었다 :
except Exception as e:
print '%s (%s)' % (e.message,type(e))
우리 모두가 알고 있듯이 OP가 여기에 왔던 경고에 대해 경고합니다.
except Exception as e:
print '%s (%s)' % (str(e),type(e))
하지 않았다.
나는 유니 코드 환경에 있지 않지만 jjc의 답변으로 궁금해 졌으므로 시도해야했습니다. 이러한 맥락에서 이것은 다음과 같이됩니다.
except Exception as e:
print '%s (%s)' % (unicode(e),type(e))
놀랍게도 str (e)과 똑같이 작동 했으므로 이제는 내가 사용하고 있습니다.
'str (e) / unicode (e)'가 '승인 된 파이썬 방식'인지 여부를 알 수 없으며 3.0에 도달했을 때 왜 그것이 좋지 않은지 알아볼 것입니다. 예상치 못한 예외 (*)는 죽지 않고 여전히 정보를 얻지 못합니다.
(*) 흠. "예기치 않은 예외"-방금 말더듬 한 것 같습니다!