2017-05-18 38 views
-3

我有一些問題讓我的錯誤處理工作我已經用盡了我的搜索和挖掘能有人幫助我一點。 基本上,即時通訊嘗試檢查路徑是否存在,如果它確實設置了file_location並且移動到其他目錄,如果用戶無權訪問創建文件夾,請在用戶My文件夾中創建目錄。Python問題例外

所有的作品,但如果我試圖強制錯誤使用我的文檔,但是,我得到錯誤,所以我不是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()來告訴您在處理異常時路徑是否有效。最安全的默認值是當前目錄,可以使用.作爲路徑進行訪問。但是,如果沒有,你應該能夠假設用戶目錄已經存在,以防萬一你的代碼需要崩潰並燒燬。你必須處理異常之前,而不是之前。

也一定要在Python中正確縮進。間距也可以幫助捕獲錯誤,所以當代碼更容易閱讀時,不要害怕使用換行符。你try條款需要一個額外的縮進級別:

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 

異常處理程序的失敗不應該允許這種情況發生。這是一場災難性的事件,您應該期望唯一的選擇仍然是崩潰到桌面。一個例外可以被捕獲並從中恢復。兩三個嵌套的異常意味着你的計算機可能已經達到了感知能力並開始推翻它的數字枷鎖(或者你需要認真思考你爲什麼要處理異常)。

+0

非常感謝您的幫助。 –