代码中的错误是什么:“%s不是整数”%`value`

时间:2018-07-14 00:35:44

标签: python assert

我从我的课程网站上下载了一个python代码,因为它应该直接在作业中使用,所以它应该可以工作,而我的python 3.6则显示以下代码有错误:

assert (type(value) == int), "value %s is not an int" % `value`

1 个答案:

答案 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"