2015-01-22 1 views
0

나는 변수가 생성 될 때까지과 같이, 실행 파이썬에서 while 루프를 원하는 :변수가 생성 될 때까지 반복 동안 파이썬을 실행하려면 어떻게해야합니까?

while choice doesn't exist: 
    do stuff involving choice 
end while loop 

어떻게 할 수 있나요?

+2

방법으로 초기화에 대한 'choice = None'? –

+0

거기에 초기화하지 않고있는 방법, 선택 거짓 또는 뭔가? –

+0

아니요 'choice'를 사용하여 while 루프를 시작하면 초기화해야합니다. 그러나 Tobias가 말했듯이, 당신은 단지'None'을 만들고'choice == None while : '을 말하면됩니다. – Gullydwarf

답변

3
while 'choice' not in locals(): 
    # your code here 

하지만 잘못된 방식으로 수행하고 있습니다. 당신은 더 나은이 같은 루프 전에 변수를 초기화 : 파이썬에서 exists()의 개념은 (다른 프로그래밍 언어에서처럼)이 없습니다

choice = None 
while choice is None: 
    # your code 
+0

첫 번째 옵션은'choice'가 정의되었지만 함수의 바깥 쪽에서 정의 된 함수 내에서 작동하지 않습니다. – martineau

0

. 이 경우

found = False 
while not found: 
    found = search() 

search() 어떤 시점에서 found에 바인딩 값을 변경 선택의 방법을 나타냅니다 : 우리는 일반적으로 다음과 같은 접근 방식처럼 falsish 값 문제의 변수를 부울 평가를 사용하여 초기화 참된 사람에게.

+0

음,'hasattr'이 있지만, 모듈 수준의 변수로 사용할 수 있다고는 생각하지 않습니다. –

+0

fanks__________ –

+0

@tobias_k : 물론 항상 해킹이 있습니다. 이 경우에도 명확하게 모듈 수준 이름의 존재 여부를 검사 할 수있는 방법이 있습니다. 왜냐하면 : 파이썬의 모든 이름은 사전에 저장됩니다. –

0

거의 파이썬 식으로해야 할 일 :

def exists(variable): 
    try: 
     eval(variable) 
    except NameError: 
     return False 
    return True 

while not exists('choice'): 
    choice = 42 

print(choice) 

내가 더 그렇게 될 것이기 때문 "거의"단지 루프 자체에 try/except을 넣어 말 :

done = False 
while not done: 
    try: 
     # do stuff with choice 
     choice = 42 
     print(choice) 
     done = True 
    except NameError: 
     pass 
관련 문제