Python 2.7脚本在3.6中报SyntaxError,字符串格式化问题求助
问题解答
嘿,这个错误不是因为需要改用f-string,核心原因是Python 3里print从原来的语句变成了必须加括号调用的内置函数,你写的还是Python 2的旧格式,这才触发了语法错误。
具体错误分析
你看到的报错指向这行代码:
print '{0:10} {1:5}'.format("Exercices","Points")
在Python 2里,print是一个语句,直接写内容就行;但到了Python 3,它变成了函数,必须用print(...)的形式调用,少了括号就会被判定为语法错误。
另外你的脚本还有个隐藏坑:sum变量在第一次使用前没初始化,不管在Python 2还是3里都会触发UnboundLocalError,得先把它设为0才行。
修改后的可运行代码(兼容Python 3.6+)
先给你最直接的修复版本,只解决语法错误和变量初始化问题:
with open("points.txt") as myfile: print('{0:10} {1:5}'.format("Exercices","Points")) sum = 0 # 先初始化求和变量 for line in myfile: entry = line.strip().split(",") sum = sum + int(entry[1]) print("{0:^10} {1:^5}".format(entry[0], entry[1])) print("{0:^10} {1:^5}".format("Results", sum))
可选优化:用f-string让代码更简洁
f-string是Python 3.6才引入的特性,确实能让字符串格式化更清爽,但它不是解决当前错误的必须项。如果你想优化代码,可以改成下面这样,顺便把sum换成total(避免和Python内置的sum()函数重名,减少潜在问题):
with open("points.txt") as myfile: print(f"{'Exercices':10} {'Points':5}") total = 0 for line in myfile: entry = line.strip().split(",") total += int(entry[1]) print(f"{entry[0]:^10} {entry[1]:^5}") print(f"{'Results':^10} {total:^5}")
内容的提问来源于stack exchange,提问作者Olive.b
相关产品推荐
相关产品推荐

