Python에서 잘못된 인수/불법 인수 조합에 대해 어떤 예외를 제기해야 합니까?
Python에서 잘못된 인수 조합을 나타내는 베스트 프랙티스에 대해 알고 싶습니다.다음과 같은 기능을 가진 몇 가지 상황을 접했습니다.
def import_to_orm(name, save=False, recurse=False):
"""
:param name: Name of some external entity to import.
:param save: Save the ORM object before returning.
:param recurse: Attempt to import associated objects as well. Because you
need the original object to have a key to relate to, save must be
`True` for recurse to be `True`.
:raise BadValueError: If `recurse and not save`.
:return: The ORM object.
"""
pass
은, 것이 , 은 약간 것이 있습니다.BadValueError
자바에는 존재하는 것으로 알고 있습니다.java.lang.IllegalArgumentException
BadValueError
Python 는 른 른 른 른 른 른 python python python python python python?
Value Error만 올리면 됩니다만, 보다 구체적인 예외가 필요한 경우는 제외합니다.
def import_to_orm(name, save=False, recurse=False):
if recurse and not save:
raise ValueError("save must be True if recurse is True")
class BadValueError(ValueError):pass
- 커스텀 클래스는 Value Error와 동일한데, 왜 사용하지 않는가?
나는 로부터 물려받을 것이다.ValueError
class IllegalArgumentError(ValueError):
pass
경우에 따라서는, 독자적인 예외를 작성하는 것이 좋을 수 있습니다만, 가능한 한 원하는 것에 가까운 빌트인 예외를 상속하는 것이 좋습니다.
특정 에러를 검출할 필요가 있는 경우는, 이름을 붙이는 것이 도움이 됩니다.
이 문제를 해결하는 가장 좋은 방법은 비단뱀 자체가 처리하는 방법이라고 생각합니다.Python은 TypeError를 발생시킵니다.예를 들어 다음과 같습니다.
$ python -c 'print(sum())'
Traceback (most recent call last):
File "<string>", line 1, in <module>
TypeError: sum expected at least 1 arguments, got 0
우리 후배 개발팀이 방금 구글 검색에서 "피톤 예외 잘못된 주장"을 발견했는데, 이 질문이 제기된 이후 10년 동안 단 한 번도 명확한 답이 제시되지 않았다는 사실에 놀랐습니다.
그것은 논쟁의 문제가 무엇이냐에 달려있다.
인수의 유형이 올바르지 않은 경우 TypeError를 발생시킵니다.예를 들어, Boohan이 아닌 문자열을 얻을 수 있습니다.
if not isinstance(save, bool):
raise TypeError(f"Argument save must be of type bool, not {type(save)}")
그러나 Python에서는 이와 같은 체크는 거의 하지 않습니다.만약 그 주장이 정말 무효라면, 어떤 더 깊은 함수가 우리를 위해 불평을 할 것이다.부울 값만 체크하면 공백이 아닌 문자열이 항상 True인 것을 알고 나중에 일부 코드 사용자가 문자열만 제공할 수 있습니다.깁스를 줄일 수 있을 거야
인수에 비활성 값이 있는 경우 ValueError를 발생시킵니다.이것은 고객의 경우에 더 적합한 것 같습니다.
if recurse and not save:
raise ValueError("If recurse is True, save should be True too")
또는 이 경우 True value of recurse는 True value of save를 의미합니다.이것은 에러로부터의 회복이라고 생각하기 때문에, 로그에도 불만을 표시하는 것이 좋을지도 모릅니다.
if recurse and not save:
logging.warning("Bad arguments in import_to_orm() - if recurse is True, so should save be")
save = True
저는 이제 막 빌트인을 본 적이 있습니다.ValueError
이 상황에서 사용됩니다.
가장 많이 사용하는 것은ValueError
(raise ValueError()
단, 불량값의 유형에 따라 달라집니다.예를 들어 문자열만 허용하는 함수를 만들었을 때 사용자가 정수를 대신 입력했다면 다음과 같습니다.TypeError
대신.사용자가 잘못 입력한 경우(유형은 올바르지만 특정 조건을 충족하지 않음)Value Error
가장 좋은 선택일 겁니다 Value
오류는 프로그램을 다른 예외로부터 차단하기 위해서도 사용할 수 있습니다. 예를 들어,ValueError
조개껍데기가 올라가지 않도록 하다ZeroDivisionError
예를 들어, 이 기능에서는 다음과 같습니다.
def function(number):
if not type(number) == int and not type(number) == float:
raise TypeError("number must be an integer or float")
if number == 5:
raise ValueError("number must not be 5")
else:
return 10/(5-number)
P.S. python 내장 예외 목록은 https://docs.python.org/3/library/exceptions.html (이것은 공식 python 데이터뱅크입니다)를 참조해 주세요.
자신의 예외를 롤하는 Markus의 제안에 동의하지만 예외의 텍스트는 문제가 개별 인수 값이 아니라 인수 목록에 있음을 명확히 해야 합니다.제안합니다.
class BadCallError(ValueError):
pass
특정 콜에 필요한 키워드 인수가 없거나 인수 값이 개별적으로 유효하지만 서로 일치하지 않을 때 사용합니다. ValueError
특정 인수가 올바른 유형이지만 범위를 벗어나는 경우에도 여전히 옳습니다.
Python에서는 이것이 표준 예외가 되어야 하지 않나요?
일반적으로 Python 스타일은 함수에 대한 잘못된 입력(발신자 오류)과 함수 내의 잘못된 결과(내 오류)를 좀 더 명확하게 구별했으면 합니다.따라서 인수 값 오류와 로컬 값 오류를 구별하기 위해 BadArgumentError도 있을 수 있습니다.
로부터의 상속에 동의할 수 있을지 잘 모르겠습니다.ValueError
--문서에 대한 저의 해석은 다음과 같습니다.ValueError
빌트인만 키워야 하는데...물려받거나 직접 키우는 게 잘못된 것 같아요.
삽입된 작업 또는 함수가 올바른 유형을 가지지만 부적절한 값을 가진 인수를 수신하고 IndexError와 같은 보다 정확한 예외에 의해 상황이 설명되지 않을 때 발생합니다.
언급URL : https://stackoverflow.com/questions/256222/which-exception-should-i-raise-on-bad-illegal-argument-combinations-in-python
'source' 카테고리의 다른 글
기존 DataFrame에 새 열을 추가하려면 어떻게 해야 합니까? (0) | 2022.09.29 |
---|---|
pip을 사용하여 패키지를 업데이트/업그레이드하는 방법 (0) | 2022.09.29 |
개체 배열에서 메서드 색인화하시겠습니까? (0) | 2022.09.29 |
Java에서 숫자를 거듭제곱하다 (0) | 2022.09.29 |
팬더 데이터 프레임을 NumPy 어레이로 변환 (0) | 2022.09.29 |