[python] 파이썬에서 EAFP 원칙은 무엇입니까?

파이썬에서 “EAFP 원칙 사용”이란 무엇입니까? 예를 들어 주시겠습니까?



답변

로부터 용어집 :

허가보다 용서를 구하는 것이 더 쉽습니다. 이 일반적인 Python 코딩 스타일은 유효한 키 또는 속성이 있다고 가정하고 가정이 거짓으로 판명되면 예외를 포착합니다. 이 깨끗하고 빠른 스타일은 많은 사람들의 존재에 의해 특징 tryexcept문. 이 기술 은 C와 같은 다른 많은 언어에 공통적 인 LBYL 스타일 과 대조 됩니다.

사전 키에 액세스하려는 시도가 그 예입니다.

EAFP :

try:
    x = my_dict["key"]
except KeyError:
    # handle missing key

LBYL :

if "key" in my_dict:
    x = my_dict["key"]
else:
    # handle missing key

LBYL 버전은 사전 내부의 키를 두 번 검색해야하며 읽기가 다소 어려울 수도 있습니다.


답변

다른 예를 들어 설명하려고합니다.

여기서 우리는 파일에 액세스하고 콘솔에서 내용을 인쇄하려고합니다.

LBYL-당신이 도약하기 전에 살펴보십시오 :

파일에 액세스 할 수 있는지 확인하고 가능하면 파일을 열고 내용을 인쇄합니다. 파일에 액세스 할 수 없으면 그 else부분에 부딪 칩니다. 이것이 경쟁 조건 인 이유는 먼저 액세스 점검을하기 때문입니다. 도달 with open(my_file) as f:할 때까지 일부 권한 문제 (예 : 다른 프로세스가 독점 파일 잠금을 얻음)로 인해 더 이상 액세스 할 수 없습니다. 이 코드는 오류를 발생시킬 가능성이 높으며 파일에 액세스 할 수 있다고 생각했기 때문에 해당 오류를 잡을 수 없습니다.

import os

my_file = "/path/to/my/file.txt"

# Race condition
if os.access(my_file, os.R_OK):
    with open(my_file) as f:
        print(f.read())
else:
    print("File can't be accessed")

EAFP-허가보다 용서를 구하기 쉽다 :

이 예에서는 파일을 열려고 시도 할 수 없으며 파일을 열 수 없으면을 (를) 처리합니다 IOError. 가능하면 파일을 열고 내용을 인쇄합니다. 그래서 우리는 무언가 를 요구하는 대신 그것을 시도 하고 있습니다. 작동하면 훌륭합니다! 그렇지 않으면 오류를 잡아서 처리합니다.

# # No race condition
try:
    f = open(my_file)
except IOError as e:
    print("File can't be accessed")
else:
    with f:
        print(f.read())


답변

“낙관적 프로그래밍”이라고합니다. 아이디어는 대부분 사람들이 올바른 일을 할 것이며 오류는 적어야한다는 것입니다. 먼저 “올바른 일”이 발생하도록 코드를 작성하고 그렇지 않은 경우 오류를 포착하십시오.

내 생각은 사용자가 실수를한다면 시간의 결과를 겪는 사람이어야한다는 것입니다. 올바른 방법으로 도구를 사용하는 사람들이 속속입니다.


답변