사용자가 존재하지 않을 수있는 데이터 포인트에 도달하기 위해 잘못된 데이터를 제공 할 수있는 상황이 있습니다. 현재 이러한 문제가 발생할 때 제기되는 오류 유형은 분명하지 않거나 간단합니다.파이썬에서 특정 예외를 서브 클래 싱하는 단점들?
내 API에서는 UI에서 잡으려고하는 오류를 만들려고합니다. (또는 UI 프레임 워크가 사용자에게 테스트하고 알 수 있도록 직접보고하여 처리하도록합니다.) :
class DataError(ValueError):
'''
raise this error with a message of what was wrong,
will also be caught when catching general ValueErrors
or other Exceptions that ValueError subclasses
'''
그리고 사용 :
if user_input not in accepted_values:
raise DataError('bad user_input: {0}'.format(user_input))
내 접근 방식에 대해 오히려 자기 의견을 고집합니까, 나는 오히려 공격 할 수없는 코드를 원한다. 다른 사람들을 숨기지 않고이 특별한 예외를 잡을 수 있기 때문에 나는 위로에 대해서 알고 있습니다. 그러나 나는 단점을 생각할 수 없다.
내 오류 메시지를 단지 ValueError
으로 제기하는 것과는 대조적으로이 작업의 단점은 무엇입니까?
새로운 예외 유형을 만들려면 어떻게해야합니까? 그 외에도, 귀하의 응용 프로그램에 대해보다 구체적인 예외 유형을 생성하는 것이 항상 좋은 생각입니다. 사용자가'ValueError'와는 달리'DataError'를 다룰 생각이 없다면 과도한 것으로 생각할 수도 있습니다. – dano
당신이 나에게 묻는다면 진짜 단점은 없다. 이것이 바로가는 길이다. 특정 예외는 일반적인 의미보다 훨씬 의미있는 역 추적 (및 코드)을 만듭니다. 이와 비슷한 라이브러리가 인기있는 예제는 ['requests.exceptions'] (https://github.com/kennethreitz/requests/blob/master/requests/exceptions.py)를 참조하십시오. –
또한 SQLAlchemy ([code] (https://github.com/zzzeek/sqlalchemy/blob/master/lib/sqlalchemy/exc.py)/[docs] (http://docs.sqlalchemy.org/en/)를 참조하십시오. rel_0_9/core/exceptions.html)). 덧붙여서 ['DataError'] (http://docs.sqlalchemy.org/en/rel_0_7/core/exceptions.html#sqlalchemy.exc.DataError)도 나와 있습니다. 마이크에게 충분하다면, 나에게 충분하다. –