2017-12-01 6 views
-1

저는 실험실 테스트 소프트웨어에서 작업하고 있습니다. 저는 백본 단계에 있으며, 너무 멀기 전에 비상 정지가 실패를 인식하는지 테스트하려고하고 있습니다. 여기 변수를 던지는 오류를 테스트합니다.

코드입니다 :

import sys 

def main(argv): 
    currentTempAverage = 0; 
    testingPlaced = False 
    typeOfTesting = False 
    issue="False" 
    class labTesting(object): 

def __init__(self,currentCondition,emergencyStop=0): 
    self.output = labLog() 
Conditions = [] 
    self.status = "OPEN" 
    self.beginningCondition = currentCondition 
    self.EndingCondition = "" 
    self.output.log("Testing opened") 

if float(currentCondition) > float(self.beginningCondition*1.003): 
    issue="True" 

if (issue=="True") and float(currentCondition) < float(beginningCondition*1.002): 
     self.output.log("YIKES!") 
     self.status="CLOSED" 

    if (emergencyStop): 
     self.emergencyStop = currentCondition - emergencyStop 
    self.output.log("stop loss") 

def close(self,currentCondition): 
    if currentCondition > (self.beginningCondition * 1.012717049): 
     self.status = "CLOSED" 
     self.EndingCondition = currentCondition 

def tick(self, currentCondition): 




def showTesting(self): 
    testingStatus = "Entry Condition: "+str(self.beginningCondition) 

    self.output.log(testingStatus) 

기본적으로, 검사있어 수준 및 수준이 어느 지점에 도달하는 경우 - true의 문제 =이 문제가 될 수 있기 때문이다.

레벨이 낮아지면 비상 정지합니다. 어떻게하는지에 따라 오류가 발생합니다.

Traceback (most recent call last): 
    File "/home/DDesm/Desktop/w/labtest/testing.py", line 18, in tick 
    if (issue=="True") and float(currentPrice) < float(entryPrice*1.002): 

    UnboundLocalError: local variable 'issue' referenced before assignment 

고마워요!

+0

당신은이 라인'클래스 labTesting (객체)가 :'주'에서()'및 들여 쓰기가 꺼져 다음과 같이 당신은을 통해 __init__ 방법에 issue를 전달하여이 올 수 있습니다. – srig

+0

첫 번째 조건이 충족되지 않으면 변수'issue'가 정의되지 않은 것입니다. 'main'에'issue = false'라고 쓰면 그 변수는'main' 함수의 범위 안에서만 존재하므로 다른 곳에서 정의되기 전까지는 그 함수 밖에서 접근 할 수 없습니다. – Tim

+0

코드가 들여 쓰기가 불완전하며 불완전합니다. –

답변

0

내부에 가지고있는 것 main 아마도 프로그램 상단에서 실행하고 싶을 것입니다. main을 실행 했더라도 해당 변수는 로컬로만 인스턴스화됩니다. 따라서, issue는 아마도에 "참"으로 설정되어뿐만 아니라 (인스턴스화 할 수 있습니다 제쳐두고

if float(currentCondition) > float(self.beginningCondition*1.003): 
    issue="True" 

, 파이썬은 부울 값을 가지고 당신은 다음 issue = True을 수행 할 수 있습니다 명령문이 될 수 있다면. 단지 if issue ...에 간단

+0

감사합니다. 이제 작동 중입니다. – user6230466

0

오류를 말한다 당신이 그것을 할당하기 전에 모든, 당신은 issue을 참조하는 브레이크 다운 :.. 당신은 그러나 문제를 정의

main에, 클래스의 __init__ 메서드 내에서 비교가 수행됩니다. __init__ 메서드의 범위에서 문제가 정의되지 않았습니다.

def __init__(self,currentCondition,issue,emergencyStop=0): 
+0

죄송합니다. 어디에서 왔는지 완전히 이해하지 못합니다. 당신은 정교 할 수 있습니까? – user6230466

+0

'issue'가 호출 된'__init__' 메소드 안에 존재하지 않습니다. 이슈를'__init__' 메소드에 전달하면, 거기에 존재할 것이고 (할당 될 것입니다), 당신은 그것을 참조 할 수 있습니다. –