我从我的课程网站上下载了一个python代码,因为它应该直接在作业中使用,所以它应该可以工作,而我的python 3.6则显示以下代码有错误:
assert (type(value) == int), "value %s is not an int" % `value`
答案 0 :(得分:1)
问题是这部分:
`value`
在Python 2.x中,this meant the same thing as repr(value)
。 Guido过去将其称为Python中最大的语法错误。它显然从未真正过时,只是被埋在文档中某个没人会注意到的地方。但是,Python 3 immediately removed it并不奇怪,其解释如下:
删除了反引号(改为使用
repr()
)。
因此,您可以这样解决它:
assert (type(value) == int), "value %s is not an int" % repr(value)
但实际上,这正是%r
的用途:
assert (type(value) == int), "value %r is not an int" % value
来自printf
-style String Formatting文档:
'r'
字符串(使用repr()
转换任何Python对象)。 (5)'s'
字符串(使用str()
转换任何Python对象)。 (5)有了这一更改,此行现在对Python 2.7和Python 3.6(以及2.1和3.8pre)都有效。
如果幸运的话,这仅意味着您的老师在更新Python 3的课程和作业时并没有完全掌握所有内容,并且永远不会再出现。 (尽管您应该向他们指出这一点。)
但是,如果您的老师实际上是在教授Python 2,而不是Python 3,那么您可能需要使用Python 2.7而不是3.6,否则将来还会有更多问题。
如果您使用的是Python 3,并且不想学习printf
样式的格式,只需对其进行更新:
assert (type(value) == int), f"value {value!r} is not an int"