2013-12-23 69 views
0

我有一個名爲test.txt的txt文件,其中有4行。我想從命令行參數中將包含單詞'exception'的行復制到一個新文件中。我已經管理了這麼多。但我也想異常處理這個IO錯誤。那就是如果從命令行有人拼錯了test.txt這個詞,它會拋出一個異常。這是我現在的代碼。請幫忙!我是初學者。目前,如果我故意拼錯,它不會顯示我打算顯示的錯誤消息。Python文件複製異常捕獲

import sys 


def Cat(filename): 
    try: 
     f = open(filename, 'rU') 
     for line in f: 
     print (line), 
     return 3 
    except IOError: 
     print('\nIO error!!', filename) 

def main(): 
    f1 = open(sys.argv[1]) 
    f2 = open(sys.argv[2], 'w') 
    for line in f1:  
    if 'exception' in line: 
     f2.write(line) 




if __name__ == '__main__': 
    main() 
+1

請還修復了您的縮進 - 所有的Python代碼應該對每個塊級別使用相同數量的縮進量,因爲您正在使用1,2和4空格的組合。 4個空格是標準的,但一致性更重要(並且至少使用1個以上)。 – Iguananaut

回答

0

,並首先檢查源文件是否存在可讀 -

if not (os.path.exists(file1) and os.access(file1, os.R_OK)): 
    print "file1 does not exists or not readable" 
    sys.exit(1) 
else: 
    //good to go 

,然後處理目標文件的寫入與嘗試除了塊。

0

你需要把open()一個try內 - except塊,就像在Cat()一樣。

目前,你是不是叫Cat(),並在main()open()不是try內 - except塊。

0

既然你說你是Python的初學者,我會假設這是一種「學習代碼」。所以,我不會告訴你任何關於設計的事情。另外,你也應該做@NPE所說的。

你可以爲了你的main功能試試這個來達到自己的目標:

def main(): 

    filename = open(sys.argv[1]) 
    if filename != "test.txt": 
     raise Exception("Here goes the message error you want to show") 
    f2 = open(sys.argv[2], 'w') 
    for line in f1:  
     if 'exception' in line: 
      f2.write(line) 
0

你忘了打電話給貓()

f2 = open(sys.argv[2], 'w') 
Cat(f1) 
for line in f1: 

,並在貓功能,您將需要籌集異常停止執行

print('\nIO error!!', filename) 
raise IOError('Invalid filename') 
+0

另外,請嘗試使用[「with」](http://stackoverflow.com/questions/9282967/how-to-open-a-file-using-the-open-with-statement)語句打開文件。理想情況下,如果發生錯誤,您希望文件連接關閉。 – skar

+0

非常感謝你們!有效 – sagarnildass