|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 lzb1001 于 2023-4-7 09:32 编辑
>>> '{a} love {b}.{0}'.format('I','FishC',0 = 'com')
SyntaxError: keyword can't be an expression
>>> '{a} love {b}.{c}'.format('I','FishC', c = 'com')
Traceback (most recent call last):
File "<pyshell#160>", line 1, in <module>
'{a} love {b}.{c}'.format('I','FishC', c = 'com')
KeyError: 'a'
>>> '{a} love {b}.{c}'.format('I', b = 'FishC', c = 'com')
Traceback (most recent call last):
File "<pyshell#166>", line 1, in <module>
'{a} love {b}.{c}'.format('I', b = 'FishC', c = 'com')
KeyError: 'a'
>>> '{abc} love {b}.{c}'.format('I', b = 'FishC', c = 'com')
Traceback (most recent call last):
File "<pyshell#167>", line 1, in <module>
'{abc} love {b}.{c}'.format('I', b = 'FishC', c = 'com')
KeyError: 'abc'
问题:
1、不是说位置参数和关键字参数综合应用的话,位置参数必须放在关键字参数前面,为何上面都返回错误?
2、为何两个错误提示还不同?
3、上面几个例子到底因为什么原因造成?
1、对于问题1,让我们解释为什么这两个示例产生了错误。
示例1:
'{a} love {b}.{0}'.format('I','FishC',0 = 'com')
在这里,你尝试使用 0 作为关键字参数的名称。但是,关键字参数的名称必须满足标识符的命名规则,而标识符的命名中不能以数字开头。因此,会收到“SyntaxError: keyword can't be an expression”的错误。
示例2:
'{a} love {b}.{c}'.format('I','FishC', c = 'com')
这个示例中,虽然关键字参数c是正确的,但是{a}和{b}的占位符期望关键字参数,而不是位置参数。因此,当你提供位置参数('I' 和 'FishC')时,Python不知道如何将它们映射到{a}和{b}。所以会出现“KeyError: 'a'”。
解决这个问题的方法是将所有参数都作为关键字参数提供:
'{a} love {b}.{c}'.format(a='I', b='FishC', c='com')
2、问题2,关于为什么这两个错误提示不同。这是因为两个示例中出现问题的原因不同:
- 示例1:出现语法错误,因为关键字参数的名称必须满足标识符的命名规则,所以Python无法理解这种用法,返回“SyntaxError”。
- 示例2:出现KeyError,因为占位符{a}和{b}没有与关键字参数匹配。它们是在尝试查找关键字参数'a'和'b'时引发的错误。
|
|