2009-12-24 6 views
2

함수가 정의되지 않은 경우 실행되는 프로그램이 있습니다. 함수에 코드를 넣으면 코드에 포함 된 코드가 실행되지 않습니다. 아무도 이유를 아나요? 코드의 일부는 다음과 같습니다python을 실행하지 않는 함수

def new_directory(): 

if not os.path.exists(current_sandbox): 
    os.mkdir(current_sandbox) 

감사

+3

이 함수는 어떻게 호출합니까? –

+1

해당 디렉토리를 만들 수있는 권한이 있습니까? –

+2

함수의 첫 줄에'print 'here''를 추가하십시오. 통제가 거기에 가고 있는지보기 위해서. 'os.path.exists (current_sandbox)'가 매번 False를주는 것은 아닙니다. –

답변

4

문제 1은 함수 ("def"는 "define"의 약자)를 정의하지만 사용자는이를 호출하지 않는다는 것입니다. 후자의 경우에 함수는 일반적으로 유용하고도 유용하게 호출 할 것이다 -

def new_directory(): # define the function 
if not os.path.exists(current_sandbox): 
    os.mkdir(current_sandbox) 

new_directory() # call the function 

문제 2는 (아직 당신을 공격되지 않은) 당신은 당신이 인수를 사용해야 할 때 전역 (current_sandbox)를 사용하는 것입니다 다른 모듈로부터. 문제 3은 불규칙한 들여 쓰기입니다 - 들여 쓰기 1을 사용하면 코드를 읽어야하는 사람 (너 자신 포함)이 열매를 맺게됩니다. 4 개로 고정하고 탭이 아닌 공백을 사용하십시오.

def new_directory(dir_path): 
    if not os.path.exists(dir_path): 
     os.mkdir(dir_path) 

new_directory(current_sandbox) 
# much later 
new_directory(some_other_path) 
4

귀하의 코드는 실제로 new_directory 함수의 정의입니다. new_directory()으로 전화하지 않으면 실행되지 않습니다. 당신이 당신의 게시물에서 코드를 실행하려고 할 때 그래서, 그냥이 같은 함수 호출을 추가

def new_directory(): 

if not os.path.exists(current_sandbox): 
    os.mkdir(current_sandbox) 

new_directory() 

즉 당신이 얻을 것으로 예상 동작인지 확실하지.

+0

하지만 일반적으로 훨씬 더 좋습니다. 'if __name__ == "__main __":'블록에 넣으십시오. 그래서 모듈이 다른 모듈에 의해서 단순히 임포트 될 때 실행되지 않을 것입니다. –

+0

@Peter Hansen : 실제로 OP는 크롤링, 걷기, 달리기 단계를 거쳐 움직여야하지만, 지금은 석기 감기가없고 움직이기 시작해야합니다. 스크립트가 모듈로 사용될 수도 있다는 생각은 아마도 그에게 발생하지 않았을 수 있습니다. –

1
def new_directory(): 
    if not os.path.exists(current_sandbox): 
    os.mkdir(current_sandbox) 

new_directory() 
관련 문제