컨트롤 플로우, 콜백 또는 예외를위한 파이썬은 무엇입니까?파이썬 콜백과 컨트롤 플로우의 예외 비교
try:
valid_data = validate(form)
try:
do_login(valid_data)
return SuccessLoginTemplate()
except LoginError:
return RenderTemplate(form)
except FormError:
return RenderTemplate(form)
콜백을
예외 : 나는 사용자 로그인 논리를 쓴 예를 들어 것은 나는이 방법을 쓸 수
validate(form, on_form_ok, on_form_error)
def on_form_ok(valid_data):
do_login(valid_data, on_login_success, on_login_error)
def on_form_error(errors):
return RenderTemplate(form)
def on_login_success(user):
return SuccessLoginTemplate()
def on_login_error(errors):
return RenderTemplate(form)
대부분의 파이썬 코드가 예외를 통해 한 경우 writen 것 같다 , IMO 콜백 스타일은 DSL 뷰 시점에서 더욱 표현력이 있습니다. 콜백의 경우 중간 코드는 콜백 간다 beacause를 중간 바르와
try:
valid_data = validate(form)
try:
#mess with some intermediate vars
do_login(valid_data)
#mess with some intermediate vars
return SuccessLoginTemplate()
except LoginError:
#mess with some intermediate vars
return RenderTemplate(form)
except FormError:
#mess with some intermediate vars
return RenderTemplate(form)
IMO이 혼란은, 코드의 가독성을 줄일 : 내 말 "또 다른 하나 개의 통화에서 바르 preapere하는 단서"더 중간 코드없는 경우 2 년 그리고 그것을 이해하기 더 쉽게 함수에서 wraped, 그래서 그것에 일부 컨텍스트를 가져옵니다 (나는 일부 DSL 의미를 지닌 함수 이름을 의미한다.) 예외의 경우이 코드는 어떤 컨텍스트에서도 언 바인딩되므로
또한 함수의 결과를 확인하고 싶지 않습니다. 이것은 또한 중간 중간 변수를 혼란스럽게 만듭니다. 모나드 또는 CPS 스타일과 같은보다 기능적인 스타일로 함께 계산을 연결하는 가장 확실한 방법을 찾습니다. 따라서 IMO 콜백은보다 expresive 한 방법이지만, 파이썬이되는 방법은 무엇입니까? 명시 적으로 조작하고 (이 같은 문서 또는 아무것도 쓰지 않는) 콜백 당신이 알고하지 않는 동안 전달 된 모든 변수와 물건 1 try
2 개 별개의 except
의 표현 적어도 :
''try '를 2 회 쓸 필요는 없습니다 : 1'try' 2'except's. – sepulchered
'do_login()'메소드가 로그인이 성공했는지 여부를 알려주는'boolean '을 반환하도록 할 수 있습니다. – Rittel
예외 계산에 집중하지 마십시오. 질문은 더 많은 pythonic 제어 흐름에 관한 것이 었습니다. – Evg