求问Python大神,这个脚本怎么提示fname未定义,我是照书敲得啊

#!/usr/bin/envpythonimportosls=os.linesep#getafilenamewhileTrue:ifos.path.exists(fnam... #! /usr/bin/env python
import os
ls = os.linesep

# get a filename
while True:

if os.path.exists(fname):
print "ERROR:'s%' already exists" % fname
else:
break

# get file content (text) lines
all = []
print "\nEnter lines('.'by itself to quit).\n"

#loop until user terminates input
while True:
entry = raw_input('>')
if entry == '.':
break
else:
all.append(entry)

#write lines to file with proper line_ending
fobj = open(fname,'w')
fobj.writelines(['%s%s' % (x, ls) for x in all ])
fobj.close()
print 'Done'
展开
 我来答
o0苏小澈o0
推荐于2018-03-26 · TA获得超过798个赞
知道答主
回答量:72
采纳率:100%
帮助的人:16.6万
展开全部

Python核心编程中写的是有问题的。一个是没有定义fname,一个是if判断条件应该是在While循环内的,而不是在它的外面。

修正后的代码如下:

[root@master-drbd python]# more makeTextFile.py 
#!/usr/bin/env python

import os
ls=os.linesep

#get filename
while True:
  fname=raw_input('please enter a filename: ')
  if os.path.exists(fname):
     print "ERROR: '%s' already exists" % fname
  else:
     break

#get file content lines
all=[]
print "\nEnter lines ('.' by itself to quit).\n"


#loop until user terminates input
while True:
  entry=raw_input('>')
  if entry == '.':
     break
  else:
     all.append(entry)

#write lines to file
fobj=open(fname,'w')
fobj.writelines(['%s%s' % (x,ls) for x in all])
fobj.close()
print 'Done!'
礻斤丶
2015-09-20 · TA获得超过4307个赞
知道大有可为答主
回答量:1544
采纳率:100%
帮助的人:1752万
展开全部
因为fname这个变量确实是没有定义,在while True语句内,你看看那句之前那里有定义过fname这个变量。。。你再核对一下你书上的内容,或者要求,是不是让你自己获取或者赋值这个变量。。。
追问
我刚刚加了个定义fname的获取,可以运行了(书本貌似有点问题)但是还有个小问题,当我输入一个确实存在的文件名时,"ERROR:'s%' already exists" % fname这句会一直刷,怎么样才能控制次数
追答
这是因为你把fname的获取语句放在了while True的外面,你这个while True是让你输入一个不存在的文件名,如果文件名存在,则说已经存在并要求你再输入一个,如果不存在则程序继续运行。
你放在while True外面,则文件名存在,输出这个警告后循环继续,由于fname的值没有变,所以还是存在。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式