, 당신은 usesSubStats이 True이고 키가 subStats에없는 경우 KeyError를 던져 원하거나 usesSubStats이 거짓이며, 경우 키를 통계에 있지 않습니다. 그래서 나는 그 문제가/elif/else chaining이 당신처럼 생각하지 않는다면 이라고 생각합니다.
고려 :
def f(x):
if x == 1:
return 'first'
elif x == 2:
return 'second'
else:
return 'other'
내가 예상 무엇을 수행하고 당신이 명심해야하는 패턴 희망
>>> f(1), f(2), f(3), f(4)
('first', 'second', 'other', 'other')
을 생산
. 테스트 코드 useSubStats에이 사실이기 때문에, 첫 번째 지점은 지금까지 테스트 :
def h():
if condition(1, True):
if condition('1b', False):
return 'first branch'
elif condition(2, False):
return 'second branch'
else:
return 'other branch'
return 'fallthrough'
>>> h()
testing condition 1
testing condition 1b
'fallthrough'
나는 당신이해야한다고 생각하는 방법을 정확히 모르겠어요 :
이
def condition(lab, val):
print('testing condition', lab);
return val
def g():
if condition(1, True):
return 'first branch'
elif condition(2, False):
return 'second branch'
else:
return 'other branch'
return 'fallthrough'
>>> g()
testing condition 1
'first branch'
그래서 코드는 다음과 같이 행동한다 "self_status in self.subStats"테스트가 실패한 후 실행이 if/elif/else 분기의 다음 구성원으로 다시 이동하여 테스트해야한다고 생각하는 것처럼 보입니다. 그것은 단순히 작동 방식이 아닙니다.
가 원하는 동작을 얻을 수있는 몇 가지 간단한 방법은 다음과 같습니다 False로 평가합니다 때문에 다음 분기 테스트 할 것 하나가 대신
if CharacterStats.usesSubStats and key in self.subStats:
있어 있도록 평평하게하는 것입니다, 또는 - 너 자신을 발견 했으니, elif를 if로 만들어라. 다시 조건을 독립적으로 테스트하거나, 이전 답과 같이 재 작성한다.
의미가 있습니까?if/elif/else리스트는 일련의 가능성을 설명하며, 순차적으로 테스트 된 조건은 이며 첫 번째 true 조건 (마지막 else를 'elif 1 :'으로 사용)에 해당하는 분기 만이 실행됩니다. 일어나는 일에 따라 다음 분기로 이동하지 마십시오 분기 내에 있습니다.
을 참고하시기 바랍니다 [파이썬 스타일 가이드] (http://www.python.org/dev/peps/pep -0008 /)는 4-space 들여 쓰기를 사용할 것을 제안합니다. – ThiefMaster
정확히 말한대로하고 있습니다. 확실히 파서의 잘못이 아닙니다. –