2017-05-18 10 views
-3

작동하기 위해 오류 처리를하는 데 몇 가지 문제가 있습니다. 검색 및 피로를 풀었습니다. 누군가 나를 도와 줄 수 있습니다. 기본적으로, 내가 경로를 설정했는지 확인하려는 경우 file_location을 설정하고 다른 곳으로 이동하면 사용자가 폴더를 만들 수있는 권한이없는 경우 사용자의 내 문서에 디렉토리를 만듭니다.파이썬 예외가있는 문제

모두 작동하지만 오류로 인해 내 문서를 사용하려고하면 오류가 발생하므로 예외가 실행될 가능성이 100 %가 아닙니다.

try: 
    if os.path.exists(project_dir): 
     file_location = (project_dir) 
    else: 
     os.makedirs(project_dir) 
     file_location = (project_dir) 
except OSError as exc: 
    if exc.errno != errno.EEXIST: 
     raise 
    pass 
    os.makedirs(user_dir) 
    file_location = (user_dir) 
+1

사용중인 실제 들여 쓰기를 반영하도록 코드를 게시하십시오. – patrick

+0

StackOverflow에 오신 것을 환영합니다. 도움말 설명서의 게시 지침을 읽고 따르십시오. [최소한의 완전하고 검증 가능한 예제] (http://stackoverflow.com/help/mcve)가 여기에 적용됩니다. MCVE 코드를 게시하고 문제를 정확하게 설명하기 전까지는 효과적으로 도움을 드릴 수 없습니다. 게시 된 코드를 텍스트 파일에 붙여넣고 설명한 문제를 재현 할 수 있어야합니다. – Prune

+0

감사합니다, 패트릭이 게시물을 빨려 내 시도는 빠져 나올 것이다! –

답변

0
는 프로그램이 명확성을 위해 약간의 흐름과 프로그램이 상당한 방법으로 실패한 경우에 대한 예외 핸들러를 저장하려고 변경하고 사용자에게 경고 또는 완전히 프로그램의 흐름 (예외 조건)을 변경해야

. 시스템에 문제가 발생했을 때 예외 인 경우 을 수정하면을 수정할 수 없습니다.

비행기에서 뛰어 내리는 경우 가장 먼저 알아야 할 것은 사용할 수있는 낙하산이 없다는 것입니다. 따라서 os.path.exists()을 사용하여 예외를 처리 할 때 경로가 유효한지 여부를 알려줍니다. 가장 안전한 기본값은 현재 디렉토리이며 .을 경로로 사용하여 액세스 할 수 있습니다. 그러나 그렇지 않다면 코드가 충돌하고 레코딩해야 할 경우에 대비하여 사용자 디렉토리가 이미 존재한다고 가정 할 수 있어야합니다. mkdir 전에 예외를 처리해야합니다.

또한 파이썬에서 올바르게 들여 쓰기를해야합니다. 간격은 오류를 잡는 데 도움이 될 수 있으므로 코드를 읽기 쉽게 만들 때 줄 바꿈을 사용하는 것을 두려워하지 마십시오. 예외 핸들러의 고장이 일어날 허용되어서는 안

try: 
    # simplify the if statement to stop repeating yourself 
    if not os.path.exists(project_dir): 
     os.makedirs(project_dir) 
    file_location = project_dir 

except OSError as exc: 
    if exc.errno != errno.EEXIST: 
     raise # reraise the current exception 

    if os.path.exists(user_dir): 
     file_location = user_dir 
    else: # FUBAR. Sound sirens immediately and try everything to keep the file somewhere in memory before failing. 
     print("[ERROR] {} was inaccessible.\nWhile attempting to recover, {} did not exist so files could not be backed up." 
      .format(project_dir, user_dir)) 
     raise 

: 귀하의 try 절은 별도의 들여 쓰기 수준을 필요로한다. 그것은 대격변의 사건이며 데스크탑에 충돌하는 유일한 옵션이 남아 있어야합니다. 하나의 예외를 잡아서 복구 할 수 있습니다. 2 ~ 3 개의 중첩 예외는 컴퓨터가 지각력을 얻었으며 디지털 족쇄를 뒤집을 수 있다는 것을 의미합니다 (또는 예외를 처리하는 이유에 대해 열심히 생각해야 함).

+0

도움을 많이 주셔서 감사합니다. –