2013-03-07 23 views
1

我很好奇如何遇到了此問題後嘗試除蟒工作:如何在文件處理過程中嘗試和除非在python中工作?

def for_file(data): 
    open_file = file('data.txt', 'w') 
    try: 
     open_file.write(data) 
    except: 
      print 'This is an error!' 
    open_file.close() 

輸出:這是一個錯誤!

def for_file(data): 
    try: 
     open_file = file('data.txt', 'w') 
     open_file.write(data) 
     print 'Successful!' 
    except: 
      print 'This is an error!' 
    open_file.close() 

輸出:成功!

這怎麼可能?

錯誤: 'ASCII' 編解碼器不能在15-16位置編碼字符:在範圍序數不(128)

我以Unicode形式接收數據。我該怎麼辦?

+2

你添加'導入追蹤; traceback.print_exc()'到'except'子句並將輸出添加到問題中? – bereal 2013-03-07 12:47:17

+0

什麼是錯誤?你的'except'塊將會捕獲任何東西。 – msvalkon 2013-03-07 12:48:40

+0

我已經添加了該錯誤。收到的數據是以unicode的形式。使用str()沒有幫助.. – Hemant 2013-03-07 13:36:46

回答

3

爲Unicode數據寫入一個文件,使用codecs.open()代替:

import codecs 

with codecs.open('data.txt', 'w', 'utf-8') as f: 
    f.write(data) 
+0

+1使用'with' – 2013-03-07 13:46:41

1

你正在得到一個TypeError。當你寫入文件時,'數據'需要是一個字符串或緩衝區。你的第二個函數也不會工作,如果你不傳遞一個字符串或緩衝區(我試過他們都傳遞一個2,都沒有工作)。下面的代碼工作。

def for_file(data): 
    open_file = file('data.txt', 'w') 
    try: 
     open_file.write(str(data)) 
     print "Success!" 
    except: 
     import traceback; traceback.print_exc() #I used this to find the error thrown. 
     print 'This is an error!' 
    open_file.close() 
+0

如果「既不工作」,您也沒有重現OP的情況。 – bereal 2013-03-07 13:08:32

+0

OP沒有通知我們他用於哪種輸入。我只是假設他在兩人之間改變了。如果不是,(即他通過了一個字符串),那麼兩者都應該工作。沒有他的投入,我什麼也做不了。 – NightHallow 2013-03-07 13:14:35

+0

@NightHallow:是的。我以unicode形式獲取數據。 str()不能正常工作。 – Hemant 2013-03-07 13:38:05

0

您可能需要打印錯誤消息弄清楚的問題:

def for_file(data): 
    open_file = file('data.txt', 'w') 
    try: 
     open_file.write(data) 
    except Exception as e: 
     print 'This is an error!' 
     print e 
    open_file.close()