2016-12-02 60 views
0

我正在做一些python 3.5的在線教程,並學習瞭如何將字符串寫入文件並保存。現在我正在嘗試寫一個函數的內容,但沒有任何運氣。Python,將函數的內容寫入.txt文件

from RECAPS import recap3_1 

recap3_1.get_details("Mark", "M", 26) 
recap3_1.get_schooling(30000,260,900) 

fw = open("Details.txt", "w") 
fw.write(recap3_1.get_details("Mark", "M", 26)) 
fw.close() 

然後我得到這個錯誤

Mark Male 26 
Traceback (most recent call last): 
29360 
File "E:/PyProjects/YoutubeProject/RECAPS/recap3.py", line 8, in <module> 
fw.write(recap3_1.get_details("Mark", "M", 26)) 
Mark Male 26 
TypeError: write() argument must be str, not None 

Process finished with exit code 1 

的get_details功能僅僅是這一點,

def get_details(name, gender, age=0): 

if age < 18: 
    print("You are too young to register") 
    return 

if len(name) < 2: 
    print("Looks like your name is too short") 
    return 

if gender is "M": 
    gender = "Male" 
elif gender is "F": 
    gender = "Female" 
else: 
    gender = "Unknown" 

print(name, gender, age) 

我在想什麼。我希望從另一個.py文件抓取功能並保存內容

+0

get_details是做什麼的?你需要粘貼更多代碼 – haifzhan

+0

@HaifengZhang –

+0

如果'get_details'沒有返回一個字符串,而是'None'(也就是沒有),那麼顯然沒有什麼要寫入文件的。你的問題可能是如何從函數返回值,而不是如何寫入文件。 – Evert

回答

1

根據你的文章,我可以看到get_details在控制檯上打印輸出,但它不能說明它是否返回任何東西。

def get_details(name, gender, age): 
    info = "{0} {1} {2}".format(name, gender, age) 
    print(info) # print on console 
    return info # you have to return a String 

Python的輸入和輸出:

f.write(字符串)寫入字符串的內容到該文件,返回寫入的字符的數目。

>>> f.write('This is a test\n') 
>>> 15 
+0

出色地工作,我不知道你可以寫這樣的功能。 –

+0

你只需要在你的'get_details'方法中添加一行:'r「{0} {1} {2}」。format(name,gender,age)''那麼你的代碼就會工作 – haifzhan

+0

我離開你之前的另一個快速問題,有沒有辦法讓下一次寫入新行?我嘗試在我的fw.write中的不同位置添加「\ n」,但似乎並不像你剛剛寫入字符串那樣工作 –

0

您正在調用的方法:recap3_1.get_details返回None,而不是您要寫入文件的值。僅僅因爲打印到屏幕上的值並不意味着您在調用該函數時返回了這些字符串。請嘗試:

test_var = recap3_1.get_details("Mark", "M", 26) 
    print(test_var) 

您應該看到None打印到屏幕上。如果您希望get_details方法返回值以寫入文件,則必須在方法定義中指定。

編輯: 現在你已經張貼你的代碼,你需要你的方法返回一個字符串...如果你想喜歡你的打印輸出分離值空間,只是做:

return ' '.join((name, gender, age)) 

代替在get_details print語句,和你的腳本應該按預期工作

0

它看起來像功能recap3_1.get_detailsrecap3_1.get_schooling打印到stdout,而不是直接返回一個字符串,這就是爲什麼你得到一個None而不是字符串。爲了寫出他們的結果,你需要將他們的輸出作爲一個字符串。你能修改他們的代碼嗎?