답변:
로부터 용어집 :
허가보다 용서를 구하는 것이 더 쉽습니다. 이 일반적인 Python 코딩 스타일은 유효한 키 또는 속성이 있다고 가정하고 가정이 거짓으로 판명되면 예외를 포착합니다. 이 깨끗하고 빠른 스타일은 많은 사람들의 존재에 의해 특징
try
및except
문. 이 기술 은 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 버전은 사전 내부의 키를 두 번 검색해야하며 읽기가 다소 어려울 수도 있습니다.
x
키가 존재하지 않는 경우를 : x = mydict.get('key')
리턴 None
하는 경우 'key'
에없는 my_dict
; 당신은 또한 할 수있는 .get('key', <something>)
, 그리고 키가 사전에없는 경우 다음 X는 뭔가를 할당됩니다. dict.setdefault()
및 collections.defaultdict
뿐만 아니라 여분의 코드를 피하기위한 좋은 일입니다.
except KeyError
뿐만 아니라 같은 AttributeError
단순하지만 최악의 사례 중 일부입니다. 그래서 except AttributeError
잘못된 위치에 놓 였기 때문에 무언가 디버깅하는 것이 멈추었습니다. 내가 생각하는 더 좋은 예는 다음과 같습니다 try: open() ... except: IOError
. 또는try: parseLine() ... except ParseError
다른 예를 들어 설명하려고합니다.
여기서 우리는 파일에 액세스하고 콘솔에서 내용을 인쇄하려고합니다.
파일에 액세스 할 수 있는지 확인하고 가능하면 파일을 열고 내용을 인쇄합니다. 파일에 액세스 할 수 없으면 그 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")
이 예에서는 파일을 열려고 시도 할 수 없으며 파일을 열 수 없으면을 (를) 처리합니다 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())