바라기를이 시리즈의 마지막 질문입니다. (요구 사항이 변경되지 않는 이상 제 프로젝트가 거의 끝났습니다).PyContract PostCondition 비 입력 매개 변수 변수 포함
저는 PyContract (PyContracts이 아님)을 사용하는 클래스 메소드에 대한 몇 가지 제약 조건을 작성하고 있습니다. 내 기능 중 하나에서 나는 불변성이있다. 그러나이 사후 조건을 구성하는 모든 변수가 함수에 대한 입력 매개 변수는 아닙니다. 일부는 함수 자체의 범위에 대한 변수입니다 (루프 카운터 등). 계약서의 사후 조항에서 어떻게 캡처 할 수 있습니까? PyContract 그것이 이름 g
및 arg5
을 모르는 저를 말할 때
def foo(*args, **kwargs):
"""
pre:
# some preconditions
inv:
# something that's clearly false
1 == 2
post:
g < arg5
"""
arg1 = kwargs['arg1']
arg2 = kwargs['arg2']
arg3 = kwargs['arg3']
arg4 = kwargs['arg4']
arg5 = kwargs['arg5']
g = 0
while g < arg5:
vars = generate_data(arg1)
best = max(arg2(var)for var in vars)
if best >= arg3:
return best
# do stuff
g += 1
문제가 발생 : 여기
내가 함께 일한지 코드의 MWE입니다. 계약에서arg5
을
kwargs['arg5']
으로 변경했지만 PyContract는 여전히
g
이 무엇인지 모릅니다. 방법 /이 문제를 해결할 수 있을까요?
내가 오류는 다음과 같습니다 도움이되지 않습니다 또한 다음과 같이
Traceback (most recent call last):
File "/Users/ashwin/github/local/Genetic-Framework/Genetic-Framework/Genetic/GA.py", line 245, in <module>
answer = runTSPGA(*settings, **settings)
File "<string>", line 3, in __assert_runTSPGA_chk
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/contract.py", line 1135, in call_public_function_all
return _call_one_all(func, va, ka)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/contract.py", line 1321, in _call_one_all
func.__assert_post(old, result, *va, **ka)
File "<string>", line 4, in __assert_runTSPGA_post
NameError: global name 'g' is not defined
는 사후 선언에 g
추가 :
post[kwargs, g]:
을 또한, 재미 그 불변 검사에 대한 코드 전혀 실행되지 않는 것 같습니다.
질문에 축 어적 오류 메시지를 추가 할 수 있습니까? 컨텍스트에 도움이됩니다. –
'kwagrs [ 'agr #']'는'kwargs [ 'arg #']'가 아니겠습니까? –
@AdamEberlin : 예. 그것은 어리석은 오타입니다. – inspectorG4dget