Python 错误:TypeError:字符串格式化期间并非所有参数都转换
Posted
技术标签:
【中文标题】Python 错误:TypeError:字符串格式化期间并非所有参数都转换【英文标题】:Python Error: TypeError: not all arguments converted during string formatting 【发布时间】:2010-11-08 19:06:56 【问题描述】:第一个 python 脚本,我收到一个错误,我似乎无法使用配置文件解决。脚本的第一部分接受用户输入并将其毫无问题地放入 mysql 数据库中。然后我开始文件系统工作,事情变得有点梨形......我可以在不使用配置文件选项的情况下让它工作,但是我想保持一致并从该文件中提取:
vshare = str(raw_input('Share the user needs access to: '))
vrights = str(raw_input('Should this user be Read Only? (y/n): '))
f = open("%s/%s" % (config['vsftp']['user_dir'], (vusername), 'wr'))
#f = open("/etc/vsftpd_user_conf/%s" % (vusername) , 'wr' )
f.write("local_root=%s/%s" % (config['vsftp']['local_root_dir'], vshare))
if vrights.lower() in ['y', 'ye', 'yes']:
buffer = []
for line in f.readlines():
if 'write_enable=' in line:
buffer.append('write_enable=NO')
else:
buffer.append(line)
f.writelines(buffer)
f.close()
我得到的错误是:
TypeError:字符串格式化期间并非所有参数都转换
如果我取消注释注释行,它会起作用并使其更进一步并且也会出错。但是一旦我解决了这个问题,我就会处理这个问题。
【问题讨论】:
【参考方案1】:错误在这里:
open("%s/%s" % (config['vsftp']['user_dir'], (vusername), 'wr'))
您有三个参数,但字符串中只有两个 %s。你可能是想说:
open("%s/%s" % (config['vsftp']['user_dir'], vusername), 'wr')
虽然 'wr' 不清楚,但您的意思可能是 w+ 或 r+。
http://docs.python.org/library/functions.html#open
【讨论】:
【参考方案2】:你的元组形状不正确
f = open("%s/%s" % (config['vsftp']['user_dir'], (vusername), 'wr'))
应该是
f = open("%s/%s" % (config['vsftp']['user_dir'], (vusername)), 'wr')
【讨论】:
做到了......感谢所有回复......这很快!遇到第二个错误,这是一个错误的文件描述符错误。尝试自己解决这个错误。再次感谢!【参考方案3】:f = open("%s/%s" % (config['vsftp']['user_dir'], (vusername), 'wr'))
您将三个参数 (config['vsftp']['user_dir'], (vusername), 'wr') 传递给一个格式字符串,需要两个参数:“%s/%s”。所以错误是告诉你格式字符串有一个参数没有被使用。
【讨论】:
【参考方案4】:我认为你有一个错误的括号,你的行应该是:
f = open("%s/%s" % (config['vsftp']['user_dir'], (vusername)), 'wr')
【讨论】:
【参考方案5】:看起来这行应该是:
f = open("%s/%s" % (config['vsftp']['user_dir'], vusername), 'wr')
(我把右括号移了过来。)
【讨论】:
以上是关于Python 错误:TypeError:字符串格式化期间并非所有参数都转换的主要内容,如果未能解决你的问题,请参考以下文章
TypeError:使用 Flask-JWT 时需要字符串或字节格式的密钥
TypeError:在字符串格式化python期间并非所有参数都转换了
python 链接数据时报错 TypeError: %d format: a number is required, not str 是因为端口号写成字符串格式的了