On 06/11/10 01:14, prasad rao wrote: > Hi > > def cript(doc=None,data =None): > if doc==None and data==None:doc=sys.agv1 > elif doc: > data=open(doc,'r').read() > data_c= binascii.hexlify(data) > else:data_c= binascii.hexlify(data) > if doc: > q=tempfile.TemporaryFile() > q.write(data_c) > os.rename(q,doc) > return > return data_c > > > cript(doc='./language.txt') > Traceback (most recent call last): > File "<stdin>", line 1, in <module> > File "<stdin>", line 10, in cript > TypeError: coercing to Unicode: need string or buffer, file found > > 1)Why I got the above error message with the above function?How to correct > it?
The error message points out here: # line 10 os.rename(q,doc) ^^^ scanning a few lines earlier, we saw: q=tempfile.TemporaryFile() os.rename() doesn't rename a file object; os.rename() takes two string arguments. > 2)Is it reasonable to have 2 if blocks in a function as above? This is where boolean algebra can help. An elif-block will only be run when all the if-elif blocks before it evaluates to false. IOW, your code is equivalent to this: if doc==None and data==None: doc=sys.agv1 if not (doc==None and data==None) and doc: data=open(doc,'r').read() data_c= binascii.hexlify(data) except that "doc==None and data==None" is only evaluated once. So, using boolean algebra (assuming a reasonable definition of == and !=): not (doc==None and data==None) and doc (doc!=None or data!=None) and doc now depending on the intent of "doc" and "doc != None"; it may be possible to simplify that to only: data != None. Note that this is all assuming a reasonable definition of ==, !=, not, etc and assuming no side effects and assuming that the checks are equally lightweight. > 3)Dose the tempfile create a fileobject on harddisk or in memory(Dose it save > my > file as I expect it to do) AFAIK, tempfile creates a file in harddisk, but I've never used tempfile, so don't quote me on that. _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor