TypeError:格式字符串 - python的参数不够

时间:2016-03-20 02:23:50

标签: python

这是代码的一部分:

    print("User would be added sudo access")
    comment = raw_input("Enter comment for sudo entry ")
    group_name = raw_input("Enter sudo group name ")

    edit_verdad = "vd edit -u '+module.sudo.alias.'%s' = '%s'' \
                   -u '+module.sudo.ent.'%s'.cmd = ALL' \
                   -u '+module.sudo.ent.'%s'.comment = '%s'' \
                   -u '+module.sudo.ent.'%s'.host = ALL' \
                   -u '+module.sudo.ent.'%s'.passwd = 0' \
                   -u '+module.sudo.ent.'%s'.user = '%s'' \
                    '%s'"  %(group_name, options.username, group_name, comment, group_name, group_name, group_name, group_name, options.hostname)
    print(edit_verdad)

变量options.hostname和options.username具有来自opt parse的正确值。

当我运行脚本时,我会得到类似的内容:

[loclhost]$ ./add_sudo_access.py -u rocky -n somehostname.xxx.yyy.com
User would be added sudo access
Enter comment for sudo entry ticket 123
Enter sudo group name sudoadm
Traceback (most recent call last):
  File "./add_sudo_access.py", line 50, in <module>
    '%s'"  %(group_name, options.username, group_name, comment, group_name, group_name, group_name, group_name, options.hostname)

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

你有10个参数格式,但你在元组中传递了9个值。

请试试这个

edit_verdad = "vd edit -u '+module.sudo.alias.'%s' = '%s'' \
                   -u '+module.sudo.ent.'%s'.cmd = ALL' \
                   -u '+module.sudo.ent.'%s'.comment = '%s'' \
                   -u '+module.sudo.ent.'%s'.host = ALL' \
                   -u '+module.sudo.ent.'%s'.passwd = 0' \
                   -u '+module.sudo.ent.'%s'.user = '%s'' \
                    '%s'"  %(group_name, options.username, group_name, comment, group_name, group_name, group_name, group_name, options.hostname, "LAST VARS")

现在你有10个%s的10个参数。

您可以将LAST VARS替换为您的值。或者从字符串中删除1 %s

答案 1 :(得分:0)

如果您仔细计算字符串中'%s'的数量,则会得到数字10.不幸的是,在%(..)列表中,您只有9个元素。您可以获得额外的%s,或者错过%(..)列表中的一个值。