2012-03-12 60 views
1

所以我的代码:为什么不写入文件?

def logdata(x, y): 
    try: 
     f = open('multlog.txt', 'a') 
     f.write("{0:g} * {1:g} = {2:g}\n".format(x,y, (x*y))) 
    except ValueError: 
     f.write("Error, you tried to multiply by something that wasn't a number") 
     raise 
    finally: 
     f.close() 
print("This is a test program, it logs data in a text file, 'multlog.txt'") 
fn = input("Enter the first number you'd like to multiply by: ") 
sn = input("Enter the second number you'd like to multiply by: ") 
logdata(int(fn), int(sn)) 

而且我希望它做的事情,就是当它达到一个值误差,为它写入文件,“错误,你试图通过一些WASN繁殖'数字'。但是,如果用户输入字母(如“j”,如ValueError: invalid literal for int() with base 10: 'j'),文件达到值错误,则不会写入文件!

回答

2

至少存在两个问题:

  1. 该文件未打开在except块的写入(或追加)。
  2. 作为@DSM在评论所指出的,ValueError异常被当你调用int()

我会改写成类似下面的例子提出。
如果您使用with语句,则可以不使用finally块。

def logdata(x, y): 
    with open('multlog.txt', 'a') as f: 
     try: 
      x = int(x); y = int(y) 
      f.write("{0:g} * {1:g} = {2:g}\n".format(x,y, (x*y))) 
     except ValueError: 
      f.write("Error") 

print("This is a test program, it logs data in a text file, 'multlog.txt'") 
fn = input("Enter the first number you'd like to multiply by: ") 
sn = input("Enter the second number you'd like to multiply by: ") 
logdata(fn, sn) 
+0

仍然没有做到这一点,即使我把F =开放(“multlog.txt”,“A”)中,除了块... – Billjk 2012-03-12 04:31:29

+1

我认为错误是在其它方面:ValueError异常被引发在int()调用中,不在函数内部,所以不会被捕获。 – DSM 2012-03-12 04:31:44

+0

谢谢,@DSM。我也注意到了。据此编辑答案。 – bernie 2012-03-12 04:36:25

相关问题