2014-02-06 45 views
0

我在寫一個腳本來保存一個文件並給出選擇保存這個文件的位置。現在,如果輸入的目錄確實存在不存在,它會中斷代碼並打印該目錄不存在的Traceback。我不希望破壞代碼,而是希望有一個解決方案來告訴用戶他們選擇的目錄不存在,並再次詢問保存文件的位置。我不想讓這個腳本創建一個新目錄。這裏是我的代碼:讓用戶選擇一個目錄來保存一個文件,如果目錄不存在如何再次請求一個目錄

myDir = input('Where do you want to write the file?') 
myPath = os.path.join(myDir, 'foobar.txt') 
try: 
    f = open(myPath, 'w') 
except not os.path.exists(myDir): 
    print ('That directory or file does not exist, please try again.') 
    myPath = os.path.join(myDir, 'foobar.txt') 
f.seek(0) 
f.write(data) 
f.close() 
+3

你是否熟悉循環? [Python文檔](http://docs.python.org/2/reference/compound_stmts.html#grammar-token-while_stmt)可以提供幫助。 – lanzz

+0

首先將'os.path.exists(...)'放置在'if'語句中,以在嘗試使用該路徑之前進行檢查。 –

+1

你的代碼甚至沒有功能... – Cilyan

回答

2

這將讓無論你開始我會注意到,我認爲你需要調整輸入語句,這樣用戶就不必把報價中沒有得到一個無效的語法錯誤

import os 
myDir = input("Where do you want to write the file ") 

while not os.path.exists(myDir): 
    print 'invalid path' 
    myDir = input("Where do you want to write the file ") 
else: 
    print 'hello' 

我不知道你的編程背景是什麼 - 在我找到Python之前我的SAS是SAS,並且一些構造只是很難去思考,因爲在沒有goto或類似聲明的情況下,Python的方法非常簡單,但是我仍然試圖添加一個goto方法,然後有人會提醒我這個時間,雖然不是更簡單,更容易EAD等

好運

我要補充一點,你真的不需要else語句我把它放在那裏,測試/驗證我的代碼會工作。如果你期望經常這樣做,那麼你應該把它放在函數中

def verify_path(some_path_string): 
    while not os.path.exists(some_path_string): 
     print 'some warning message' 
     some_path_string = input('Prompt to get path') 
    return some_path_string 



if _name_ == main: 
some_path_string = input("Prompt to get path") 
some_path_string = verify_path(some_path_string) 
+0

謝謝你,絕對把我放在正確的軌道上。我實際上已經編程了幾年,自學了Python/Django ......我幾年來一直在與Django合作。但現在我發現自己在一個核心的Python團隊中學習繩索。感謝您的幫助! – tjoenz

相關問題