2017-02-22 57 views
-2

我最近試圖將錯誤寫入一個文件,我經過一番研究後才設法做到這一點。現在的問題是我試圖將計算結果寫入文件,但似乎無法獲得我用於一起工作的兩個函數。有人可以看看我的代碼並幫助我嗎?我如何獲得兩個功能一起工作?

(截至目前已經我註釋掉我的函數嘗試寫結果我從計算器獲得(),以所謂的單獨的文件「的Result.txt」)

import sys 
import logging 

WRITE = "w" 
APPEND = "a" 
READWRITE = "r+" 
fileName = "error.txt" 
fileName2 = "result.txt" 
logging.basicConfig(filename=fileName, level=logging.ERROR) 

def main(): 
    checkError() 
    return 

def calculator(): 
    firstNumber = int(input("Pleas enter a number: ")) 
    secondNumber = int(input("Pleas enter a number: ")) 
    result = firstNumber/secondNumber 
    print(result) 
    return 

def checkError(): 
    try: 
     calculator() 
    except: 
     error = sys.exc_info()[0] 
     logging.error(msg=error) 
     print("Error logged to:",fileName) 
     return 

# def writeResult(): 
#  myFile = open(fileName2, mode= WRITE) 
#  myFile.write() 
#  myFile.close() 
#  return 

main() 
+0

你在哪裏調用了writeResults()?你想寫什麼? – depperm

+1

你實際上並沒有在'writeResults'中寫入任何'fileName2' .. [python教程](https://docs.python.org/3/tutorial/inputoutput.html)可能對你有用。搜索'f.write(string)'查找相關部分。 – whrrgarbl

+0

我還沒有在這裏調用writeResult()。但我想從calculator()得到結果並將其寫入單獨的文件。 – Grubbier

回答

0

你永遠不調用寫結果()功能。您應該添加一個參數writeResult()像這樣:

def writeResult(string): 
    myFile = open(fileName2, mode= WRITE) 
    myFile.write(string) 
    myFile.close() 
    return 

其中str是將被寫入文件的值。然後你必須打電話給它。我會在checkError()中調用它,因爲這是你調用calculator()的地方。要獲得計算器計算出的值,您需要將其返回。要做到這一點,所有你需要做的是結果變量添加到return語句,因此該函數將是這樣的:

def calculator(): 
    firstNumber = int(input("Pleas enter a number: ")) 
    secondNumber = int(input("Pleas enter a number: ")) 
    result = firstNumber/secondNumber 
    print(result) 
    return result 

那麼你應該把它在checkError(),並把它傳遞給寫結果()作爲參數:

def checkError(): 
    try: 
     writeResult(calculator()) 
    except: 
     error = sys.exc_info()[0] 
     logging.error(msg=error) 
     print("Error logged to:",fileName) 
     return 

所以基本上,您從calculator()獲得的值將作爲參數傳遞給writeResult。

+0

嘿,馬修,我試過你說的,但現在每次運行程序時都會記錄一個錯誤,但仍然沒有寫入我想要的文件:/ – Grubbier

+0

這不起作用,因爲'calculator()不返回任何東西。命名變量'str'也是一個壞主意,因爲這是內置Python的名稱。 – whrrgarbl

+0

@Grubbier,我剛剛編輯了我的答案,我注意到我做的那個whrrgarbl指出的一些錯誤 –

0

你的writeResult()功能是這裏最大的問題。 Python中的write()函數接受一個字符串參數,這是它實際輸出到文件的參數(例如,參見the Python tutorial)。所以,你需要把結果放在那個函數調用中。爲了做到這一點,你將不得不爲你的函數添加一個參數。因此,它變成了:

def writeResult(result): 
    myFile = open(fileName2, mode= WRITE) 
    myFile.write(str(result)) 
    myFile.close() 

我用str(result)那裏,因爲result將號碼類型,所以你需要明確地將其轉換爲一個字符串。否則,Python會拋出一個錯誤。

另請注意,我刪除了最後一行return。在Python中,當不返回任何內容時,不需要顯式地放置返回語句。

現在您必須更改calculator()才能將結果傳遞給此函數。一種選擇是返回結果,然後在main()函數中調用writeResult。另一種方法是在計算器函數中調用writeResult,將最後一行更改爲writeResult(result)(再次,不需要空的return語句)。

+0

謝謝你的幫助 – Grubbier

+0

@Grubbier,很高興聽到它!不要忘記,您可以使用箭頭向左滾動答案,並通過單擊刻度標記接受最能幫助您的答案。 – whrrgarbl

相關問題