鱼C论坛

 找回密码
 立即注册
查看: 1629|回复: 1

[已解决]format()方法的位置参数和关键字参数

[复制链接]
发表于 2023-4-7 09:27:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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、上面几个例子到底因为什么原因造成?
最佳答案
2023-4-7 09:32:49
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'时引发的错误。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-4-7 09:32:49 | 显示全部楼层    本楼为最佳答案   
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'时引发的错误。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-23 23:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表