我想在txt文件中保存函数调用的值,但我得到的是typeerror:期望一个字符缓冲区对象
def printme( x ):
"Function f(x) = x(x+2)"
print x*(x+2)
return
myfile = open('xyz.txt', 'w')
for w in b:
myfile.write('%d' (printme(w)))
myfile.close()
Run Code Online (Sandbox Code Playgroud)
您的代码至少有四个问题已发布,并且没有一个会显示您实际看到的错误.
首先,有一个IndentationError:
myfile = open('xyz.txt', 'w')
for w in b:
myfile.write('%d' (printme(w)))
Run Code Online (Sandbox Code Playgroud)
您不能随意随意缩进代码; 该for语句遵循赋值语句,并且该myfile.write调用应该在for循环内.所以:
myfile = open('xyz.txt', 'w')
for w in b:
myfile.write('%d' (printme(w)))
Run Code Online (Sandbox Code Playgroud)
如果你修复它,你的下一个错误将是a TypeError,但它将是'str' object is not callable,而不是任何有关字符缓冲区对象的错误.
在Python中,形式的任何东西foo (bar)都是函数调用 - 尝试foo像函数一样调用,bar作为唯一的参数.所以,这个表达式:
'%d' (printme(w))
Run Code Online (Sandbox Code Playgroud)
...尝试将字符串'%d'作为函数调用,将结果printme(w)作为唯一参数传递.这显然不会起作用,因为字符串不像函数那样可调用.因此例外.
您可能想在%那里使用运算符,如下所示:
'%d' % (printme(w))
Run Code Online (Sandbox Code Playgroud)
这很接近,但仍然不太正确,因为(printme(w))它不是一个值的元组.元组由逗号创建,而不是由括号创建,因此一个值的元组必须包含逗号.所以:
'%d' % (printme(w),)
Run Code Online (Sandbox Code Playgroud)
(你实际上并不需要这里的元组,因为%对单个值有特殊的处理.但如果你想创建一个元组,你应该把它弄好,不要弄错,让你的代码可能正常工作......)
现在我们已经接近了,但是我们还有另外一个问题:printme不返回数字,它打印一个数字,然后返回None.(这是你从任何不同的函数得到的默认值return.)因此,%操作员将给你另一个TypeError,这次说'%d" format: a number is required, not NoneType.
要解决此问题,您需要return使用值而不是(或除此之外)打印它:
def printme( x ):
"Function f(x) = x(x+2)"
return x*(x+2)
Run Code Online (Sandbox Code Playgroud)
当然,一个名为printme而不是返回值的函数有点误导,所以你可能想要在此时重命名它...
如果你解决了这个问题,那么一切正常.没有任何TypeError说法expected a character buffer object.
最有可能的是,在您的实际代码中,您正在尝试获取write的值printme,而不是先将其格式化为字符串(使用该%运算符或其他方式).例如,如果您这样做:
myfile.write(printme(w))
Run Code Online (Sandbox Code Playgroud)
...那是试图写None(如果你没有修复最后一个问题)或某个数字(如果你这样做),它们都不是字符串(或其他"字符缓冲区对象"),因此错误.
要解决这个问题,只需使用您展示给我们的代码而不是代码.
总而言之,这里的工作代码可以完成您显然要做的事情:
def printme( x ):
"Function f(x) = x(x+2)"
return x*(x+2)
myfile = open('xyz.txt', 'w')
for w in b:
myfile.write('%d' % (printme(w),))
myfile.close()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
80 次 |
| 最近记录: |