我试图简化错误消息,因为在我的项目中,它预计会打印很多错误。我尝试了这个简单的例子,但似乎没有什么工作。
我怎样才能让它重复n次,并打印出出错的位置呢?它总是像n= 1一样打印出来。
n = 1
error = f"Error word {n}"
def test(word):
if len(word)>5:
print(error)
ar = ['pizza', 'toasts', 'ham', 'mayo', 'houses']
for word in ar:
test(word)
n+=1
我试过了
error = f"Error word {n}"
error = 'Error word '+ str(n)
error = "Error word {n}".format(n)
但也许我没有以正确的方式看待问题?
4条答案
按热度按时间nqwrtyyt1#
因为n在循环之外。代码一旦执行就不会更新第2行中n上的值。它类似于error = 'Error word 1'
vddsk6oq2#
f-strings将在它们在源代码中“看到”的时候使用变量值-之后它们将表现得像普通字符串一样。
对变量进行后期绑定的方法是对字符串使用经典的
.format
方法,而不是查询字符串:你必须在.format
调用中传入要替换的变量作为参数:在尝试使用
format
时遇到的问题是,有一些不同的模式可以使用它:只要使用普通的" ... {} ..."
,中间没有任何东西,将被替换为格式中的第一个位置参数。但是如果你像"{n}"
中一样有一个命名变量,你必须在格式调用中传递一个命名参数。这将工作:
这里,
=
之前的n
是字符串中显示的名称,位于{n}
标记之间。=
之后的n
是值,在本例中为全局变量n
顺便说一下,这不是一个好的功能设计:你应该把它需要的所有数据作为参数传递给它,而不是依赖
n
作为全局变量:flvlnr443#
你的代码不起作用的原因是因为行:
只需要将n的初始值放入字符串中,即1,并且不会随着循环而更新。(换句话说,字符串被卡住为“错误字1”)
下面是更新后的代码:
xmd2e60i4#
Python在运行时计算f字符串,在计算时结果是
"Error word 1"
,它被存储为字符串。您还可以使用
enumerate
,并将起始值设置为1