2017-02-22 55 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

相关问题