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 时需要字符串或字节格式的密钥

python脚本中的TypeError

Python TypeError:格式字符串的参数不足

TypeError:在字符串格式化python期间并非所有参数都转换了

python 链接数据时报错 TypeError: %d format: a number is required, not str 是因为端口号写成字符串格式的了

在 Python 中读取 JSON 字符串:接收错误“TypeError:字符串索引必须是整数”