我编写了一个脚本,该脚本在命令行接受用户输入,并执行计算以确定某人的大致年龄。
我不明白的是为什么这部分会出错(invalid syntax
错误(:
print("That makes you approximately %d years old", % (int(year - int(sys.argv[2]))))
完整的脚本如下:
from datetime import date
import sys
greeting = sys.argv[1]
year = int(date.today().year)
if __name__ == '__main__':
print("This script is called: ", sys.argv[0])
print("Your message is: ", greeting)
print("Your year of birth is: ", sys.argv[2])
print("That makes you approximately %d years old", % (int(year - int(sys.argv[2]))))
我在这里错过了什么?
%
是一个二进制运算符,其第一个操作数必须是字符串。最后有一个逗号太多了:
print("format %d", % (num)) # wrong
print("format %d" % (num)) # correct
除此之外,你可能会惊讶于这里的括号没有任何作用:
print("format %d" % num) # also correct
这是一个奇怪的副作用,它不是像函数调用一样的东西,而是一个运算符。这也意味着第二个操作数通常是一个元组,以允许多个格式化操作数:
print("format %d" % (num,)) # the best way
为什么这样更好?举个例子:
tup = ()
print("format %s" % tup) # TypeError: not enough arguments for format string
print("format %s" % (tup)) # same
print("format %s" % (tup,)) # correct
这就是我更喜欢更新格式函数,甚至更好的f字符串的原因之一。