이것은 오리 타이핑의 본질에 대한 질문이 아니며 파이 토닉을 유지하는 것에 관한 더 많은 것입니다.
우선 dicts를 다룰 때, 특히 dict의 구조가 상당히 예측 가능하고 주어진 키가 일반적으로 존재 하지 않지만 때로는 존재하는 경우 두 가지 접근법을 먼저 생각합니다.
if myKey in dict:
do_some_work(dict[myKey])
else:
pass
그리고 물론 예 올데의 '용서와 허가'접근.
try:
do_some_work(dict[myKey])
except KeyError:
pass
여행사 파이썬 사람으로서, 나는 후자가 많이 선호하는 것을 느낍니다. 파이썬 문서 try/excepts
에서는 실제 실수가있을 때 선호되는 것처럼 보이기 때문에 이상하게 생각합니다 .
가끔 dict에 myDict에 키 가없고 항상 해당 키 가있는 것은 아니라는 것이 문맥 상 오도적인 시도 / 제외입니까? 이것은 프로그래밍 오류가 아니라 데이터의 사실 일뿐입니다.이 지시에는 특정 키가 없었습니다.
try / except / else 구문을 볼 때 특히 중요해 보입니다. try / except / else 구문은 try가 너무 많은 오류를 포착하지 않도록하는 데 매우 유용합니다. 다음과 같은 작업을 수행 할 수 있습니다.
try:
foo += bar
except TypeError:
pass
else:
return some_more_work(foo)
그렇게하면 코드가 잘못되어 모든 종류의 이상한 오류를 삼키지 않을 것입니까? 위의 코드는 추가하려는 것을 보지 2 + {}
못하고 코드의 일부가 잘못되었다는 것을 결코 깨닫지 못할 수도 있습니다. 모든 유형을 확인해야한다고 제안하지는 않습니다. 그래서 JavaScript가 아닌 Python이기 때문에 시도 / 제외와 관련하여 다시해서는 안되는 일을하는 프로그램을 잡는 것으로 보입니다. 계속해서
위의 예는 밀짚 맨 논쟁의 일부이며 실제로 의도적으로 나쁘다는 것을 알고 있습니다. 그러나 pythonic creed의 better to ask forgiveness than permission
도움을 줄 수는 없지만 모래의 선이 실제로 if / else와 try / except의 올바른 적용 사이, 특히 당신이 무엇을 기대 해야하는지 알 때 작업중인 데이터
나는 여기서 속도 문제 또는 모범 사례에 대해 이야기하지 않고, 어느 방향 으로든 갈 수있는 것으로 보이는 벤 다이어그램에 의해 조용히 혼란스러워하지만 사람들은 시도 / 제외 측면에서 실수합니다. 왜냐하면 '어딘가 누군가가 파이썬 적이라고 말했기 때문입니다.' 이 구문의 적용에 대한 잘못된 결론을 도출 했습니까?