字符串不工作的Python百分比运算符

字符串不工作的Python百分比运算符,python,Python,我有这段代码,但它说TypeError没有足够的参数用于格式化字符串,尽管我给了它一个具有适当数量参数的元组。有人能帮我吗?我已经查看了所有的堆栈溢出,python文档似乎也没有帮助 image_urls = { 'horse.jpg': 'a.jpg', 'bison.jpg': 'b.jpg', 'bald_eagle.jpg': 'c.jpg', 'pig_in_mud.jpg': 'd.jpg', 'baby_monkey.jpg': 'e.jpg', 'cute_golden_retr

我有这段代码,但它说TypeError没有足够的参数用于格式化字符串,尽管我给了它一个具有适当数量参数的元组。有人能帮我吗?我已经查看了所有的堆栈溢出,python文档似乎也没有帮助

image_urls = {
'horse.jpg': 'a.jpg',
'bison.jpg': 'b.jpg',
'bald_eagle.jpg': 'c.jpg',
'pig_in_mud.jpg': 'd.jpg',
'baby_monkey.jpg': 'e.jpg',
'cute_golden_retriever.jpg': 'f.jpg',
'cute_fluffy_bunny.jpg': 'g.jpg',
'fluffy_kitten.jpg': 'h.jpg',
'default_profile_pic.jpg': 'i.png'
}
mystr = '''<tr><td>Username:</td><td><input type='text' name='username'/></td></tr>
        <tr><td>Profile picture:</td><td>
            <table>
                <tr><td><img src='%s'/></td><img src='%s'/><td></td><td><img src='%s'/></td></tr>
                <tr><td><img src='%s'/></td><img src='%s'/><td></td><td><img src='%s'/></td></tr>
                <tr><td><img src='%s'/></td><img src='%s'/><td></td><td><img src='%s'/></td></tr>
            </table>
        </td></tr>
        <tr><td colspan="2" class="description"><i>Image must be 1MB or less.</i></td></tr>
        <tr><td>Website:</td><td><input type='url' name='website' placeholder='example.com'/><td/></tr>
        <tr><td colspan="2" class="description"><i>Got a home on the web? Put it here.</i></td></tr>
        <tr><td>Bio:</td><td><textarea name='bio' placeholder='I am John Doe, and I enjoy doing this, that and a little more of this. (more content more elaboration)'></textarea></td></tr>
        <tr><td colspan="2" class="description"><i>Tell about yourself here.</i></td></tr>
        <tr><td>Gender:</td><td><input type='radio' name='gender'/> M <input type='radio' name='gender'/> F</td></tr> 
        <tr><td>Age:</td><td><input type='text' name='age'/></td></tr>
        </table>
        <h4>Privacy</h4>
        <table>
        <tr><td>Hide age</td><td><input type="checkbox" name="hide-age"/></td></tr>
        <tr><td>Hide gender</td><td><input type="checkbox" name="hide-gender"/></td></tr>
        <tr><td>Hide email</td><td><input type="checkbox" name="hide-email"/></td></tr>
        </table>
        <div class='button-jumbo'>Create account</div>
        <script>
        function onPasswordChange() {
            var strength = this.value.length * 3;
            var weakPasswords = ['password', '123456', '12345678', '1234', 'qwerty', '12345', 'dragon', 'baseball', 'football', 'letmein', 'security', 'monkey', '696969', 'abc123', '111111', 'ncc2701', 'trustno1'];
            strength += (this.value.match(/[\/;'"\[\]\{\}\-_\!@#\$\\\%\^\&\*\)\(]/g) ? (this.value.match(/[\/;'"\[\]\{\}\-_\!@#\$\\\%\^\&\*\)\(]/g).length * 8 ): 0);
            strength += (this.value.match(/[A-Z]/g) ? (this.value.match(/[A-Z]/g).length * 5) : 0);
            strength += (this.value.match(/[0-9]/g) ? (this.value.match(/[0-9]/g).length * 6) : 0);
            if (weakPasswords.indexOf(this.value.toLowerCase()) !== -1) {
                strength = 5;
            }
            document.getElementById("password-meter").value = strength.toString();
        }
        var pswdElt = document.getElementsByName('password')[0];
        pswdElt.oninput = onPasswordChange;
        pswdElt.onchange = onPasswordChange;
        pswdElt.onkeydown = onPasswordChange;
        </script>
        ''' % ( image_urls['bald_eagle.jpg'], image_urls['pig_in_mud.jpg'], image_urls['cute_golden_retriever.jpg'], image_urls['bison.jpg'], image_urls['default_profile_pic.jpg'], image_urls['horse.jpg'], image_urls['baby_monkey.jpg'], image_urls['cute_fluffy_bunny.jpg'], image_urls['fluffy_kitten.jpg'] )
image\u url={
“horse.jpg”:“a.jpg”,
‘bison.jpg’:‘b.jpg’,
“秃鹰.jpg”:“c.jpg”,
‘pig_in_mud.jpg’:‘d.jpg’,
“baby_monkey.jpg”:“e.jpg”,
“可爱的金毛寻回犬.jpg”:“f.jpg”,
“可爱的毛茸茸的兔子.jpg”:“g.jpg”,
“fluffy_kitten.jpg”:“h.jpg”,
“default_profile_pic.jpg”:“i.png”
}
mystr=''用户名:
个人资料图片:
图像必须小于等于1MB。
网站:
在网上有家吗?把它放在这里。
生物:
在这里谈谈你自己。
性别:男、女
年龄:
隐私
隐藏年龄
隐藏性别
隐藏电子邮件
创建帐户
函数onPasswordChange(){
var strength=this.value.length*3;
var weakPasswords=['password'、'123456'、'12345678'、'1234'、'qwerty'、'12345'、'dragon'、'Basketball'、'football'、'letmein'、'security'、'monkey'、'69696969'、'abc123'、'111111'、'ncc2701'、'trustno1'];
强度+=(this.value.match(/[\/;'“\[\]\{\\\\\\-\!@\$\\\%\\^\&\*\)\(]/g)?(this.value.match(/[\/;'“\[\]\\\\\\\\\\\-\\!\\\$\\\\%\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\%\\&*\)\(]/g)。长度*8:0);
强度+=(此.value.match(/[A-Z]/g)?(此.value.match(/[A-Z]/g).length*5):0);
强度+=(此.value.match(/[0-9]/g)?(此.value.match(/[0-9]/g).长度*6):0);
if(weakPasswords.indexOf(this.value.toLowerCase())!=-1){
强度=5;
}
document.getElementById(“密码表”).value=strength.toString();
}
var pswdElt=document.getElementsByName('password')[0];
pswdElt.oninput=onPasswordChange;
pswdElt.onchange=onPasswordChange;
pswdElt.onkeydown=onPasswordChange;
“%”(图片URL['bald_eagle.jpg']、图片URL['pig_in_mud.jpg']、图片URL['cute_golden_retriever.jpg']、图片URL['bison.jpg']、图片URL['default_profile_pic.jpg']、图片URL['horse.jpg']、图片URL['baby_monkey.jpg']、图片URL['cute_fluffy_bunny.jpg']、图片URL['fluffy.jpg']

您的正则表达式中有%,python认为它也应该在其中放置值


将正则表达式中的%替换为%%,这就是在python中转义它的方式。正则表达式中有%,python认为它也应该将值放在那里


将正则表达式中的%替换为%%,这就是在python中转义它的方式

strength += (this.value.match(/[\/;'"\[\]\{\}\-_\!@#\$\\\%\^\&\*\)\(]/g)
请注意,其中隐藏了一个
%
字符。python字符串格式化程序会对此进行检查,并尝试将其解释为(无效)格式说明符
%\
,因为元组中没有匹配的参数,所以抛出该异常。如果在元组中包含其他参数,则会出现以下异常:

ValueError: unsupported format character '\' (0x5c) at index 2017
答案是:通过添加另一个
%
来转义任何未用作格式说明符的
%
字符:

strength += (this.value.match(/[\/;'"\[\]\{\}\-_\!@#\$\\\%%\^\&\*\)\(]/g)

这将导致字符串格式化程序在输出字符串中留下一个百分比。

问题出在这一行:

strength += (this.value.match(/[\/;'"\[\]\{\}\-_\!@#\$\\\%\^\&\*\)\(]/g)
请注意,其中隐藏了一个
%
字符。python字符串格式化程序会对此进行检查,并尝试将其解释为(无效)格式说明符
%\
,因为元组中没有匹配的参数,所以抛出该异常。如果在元组中包含其他参数,则会出现以下异常:

ValueError: unsupported format character '\' (0x5c) at index 2017
答案是:通过添加另一个
%
来转义任何未用作格式说明符的
%
字符:

strength += (this.value.match(/[\/;'"\[\]\{\}\-_\!@#\$\\\%%\^\&\*\)\(]/g)

这将导致字符串格式化程序在输出字符串中留下一个百分比。

您能将示例减少到尽可能小的程度吗?您的正则表达式中还有两个需要转义的
%
%
)在与格式化运算符一起使用的字符串中。您能将示例缩小到尽可能小的范围吗?在与格式化运算符一起使用的字符串中,您的正则表达式中还有两个需要转义的(
%%
)。谢谢,这很有效!我只是更喜欢多莉亚斯的答案,因为它比较短。谢谢,这很有效!我只是比较喜欢多莉亚的答案,因为它比较短。