【问题标题】:Why does the error: SyntaxError: f-string: mismatched '(', '{', or '[' in a block of code occur in Python?为什么 Python 中会出现错误:SyntaxError: f-string: mismatched '(', '{', or '[' in a block of code?
【发布时间】:2020-03-09 16:50:58
【问题描述】:

我尝试创建一个Person 类,并且在使用 f 字符串打印时出现了一个SyntaxError。你知道为什么吗?

class Person:
  def __init__(self, age, firstName, lastName='', hobbies=None):
    self.age = age
    self.firstName = firstName
    self.lastName = lastName
    self.hobbies = hobbies

  def printDescription():
    firstPart = f'My name is {self.firstName + {' ' if self.lastName != '' else ''} + self.lastName} and I am {self.age}'
    secondPart = f', also I like {self.hobbies}' if self.hobbies else ''
    print(firstPart + secondPart)

me = Person.__init__(me, 500†, 'Ken', 'Tran', 'programming')

me.printDescription()

SyntaxError: f-string: mismatched '(', '{', or '['

有人知道为什么会这样吗? (就像一个错字)我想我只是没有仔细观察,还是有原因?

† 一些随机数,不是我的真实年龄

【问题讨论】:

  • f-string 中的每个变量都应该用大括号括起来。例如你有:{self.firstName + {。你也有:like {self.hobbies} 看起来不错。
  • 我会推荐一个返回全名的@property 方法。
  • 你想在 fstring 括号中做逻辑吗?

标签: python f-string square-bracket braces


【解决方案1】:

由于您使用' 作为 f 字符串的分隔符,{ 之后的' 将终止该字符串,从而导致不匹配的{。在字符串周围和里面的字符串使用不同的分隔符。

另外,没有必要在{} 中使用{}。这将创建一个set 对象。使用() 进行分组。

firstPart = f"My name is {self.firstName + (' ' if self.lastName != '' else '') + self.lastName} and I am {self.age}"

【讨论】:

  • 非常感谢,我是 Python 的初学者,所以这对我来说是新的。
猜你喜欢
  • 2019-09-10
  • 2022-06-24
  • 1970-01-01
  • 1970-01-01
  • 2022-12-27
  • 2022-11-19
  • 1970-01-01
  • 1970-01-01
  • 2023-02-17
相关资源
最近更新 更多