在 __repr__() 函数中使用 f 字符串时出现 EOF 错误

EOF Error while using f-string in __repr__() function

提问人:GrantG 提问时间:11/28/2018 最后编辑:JongwareGrantG 更新时间:11/28/2018 访问量:433

问:

我正在使用 Python 3.x,我正在尝试从函数中获取要报告的 f 字符串,但我似乎无法让以下格式化的字符串按照我期望的方式工作。__repr__

我经常收到“SyntaxError:解析时意外的 EOF”

def __repr__(self):
    return f"Player has {'Soft' if self.soft > 0} {self.count}. Cards are {self.cards}."

给出错误的部分是 {'Soft' if self.soft > 0}。如果不清楚,我正在尝试包含“软”IFF self.soft>0 一词,如果没有,请不要在字符串中添加任何单词。

python 字符串 eof repr f-string

评论

0赞 chepner 11/28/2018
公平地说,该错误消息具有相当大的误导性。解析器没有到达文件的末尾(在任何实际意义上),而是到达 f 字符串内块的末尾。{...}
0赞 chepner 11/28/2018
另请参阅 stackoverflow.com/questions/1984162/purpose-of-pythons-repr 了解 和 应返回的字符串类型。__repr____str__

答:

5赞 blhsing 11/28/2018 #1

与语句不同,条件表达式中的关键字不是可选的:ifelse

def __repr__(self):
    return f"Player has {'Soft' if self.soft > 0 else ''} {self.count}. Cards are {self.cards}."

评论

0赞 GrantG 11/29/2018
棒。谢谢。
0赞 GrantG 11/29/2018
后续问题,你说的“如果”是可选的是什么意思?
0赞 blhsing 11/29/2018
很高兴能帮上忙。我的意思是,在语句中,块是可选的,但在条件表达式中,即使它也使用关键字,表达式的部分也不是可选的。假设您省略了关键字,只是因为您与语句的用法相提并论。ifelseifelseelseif