Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么我会得到;并非所有参数都已转换”;将%r与元组一起使用时?_Python_Python 2.7 - Fatal编程技术网

Python 为什么我会得到;并非所有参数都已转换”;将%r与元组一起使用时?

Python 为什么我会得到;并非所有参数都已转换”;将%r与元组一起使用时?,python,python-2.7,Python,Python 2.7,有人能解释一下为什么我在元组中使用%r时会出现以下错误吗 >>> repr((1,2)) '(1, 2)' >>> class Foo(object): ... def __init__(self,vals): ... self.vals=vals ... def __repr__(self): ... return "Foo(%r)" % self.vals ... >>>

有人能解释一下为什么我在元组中使用%r时会出现以下错误吗

>>> repr((1,2))
'(1, 2)'
>>> class Foo(object):
...     def __init__(self,vals):
...             self.vals=vals
...     def __repr__(self):
...             return "Foo(%r)" % self.vals
... 
>>> foo = Foo((1,2))
>>> foo
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 5, in __repr__
TypeError: not all arguments converted during string formatting
报告((1,2)) '(1, 2)' >>>类Foo(对象): ... 定义初始值(自身,VAL): ... self.vals=vals ... 定义报告(自我): ... 返回“Foo(%r)”%self.vals ... >>>foo=foo((1,2)) >>>福 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 文件“”,第5行,在报告中__ TypeError:在字符串格式化过程中并非所有参数都已转换
打印出
\uuu repr\uuu
的适当方式是什么?我应该使用
%s
repr(self.vals)
来代替吗?

操作符本身取一个元组,所以基本上是这样做的:

'Foo(%r)' % (1, 2)
self.vals
包装在一个元素元组中:

'Foo(%r)' % (self.vals,)
原则上,您也可以使用变量中定义的字符串:

REPRFORMAT % (self.vals,)
在这种情况下,您希望将其留给该变量(可能来自配置文件?)如何格式化
self.vals
,无论是
%r
还是
%s

您也可以使用以下选项:

这种格式为您提供了更大的输入灵活性;您可以在
vals
元组中处理单个项,例如:

return 'Foo(({0[0]:04d}, {0[1]:02d}))'.format(self.vals)

这将导致您的示例输入出现
Foo((0001,04))

您可以轻松检查使用
%s
时发生的情况,您为什么觉得需要到这里来询问它?@InbarRose:因为对于不熟悉
%
字符串格式运算符的人来说,这种行为是意外的。@Inbar“请有人解释一下为什么我在元组中使用%r时会出现以下错误?”这就是我提出此问题的原因。我很想了解为什么会出现此错误以及最合适的(Pythonic)处理方法。是否对使用“推荐”方法有共识?我个人认为“Foo(%s)”%repr(self.vals)是最容易阅读的,但正如我上面提到的,它回避了一个问题:为什么要使用%r.@Tim:the
.format()
字符串格式化方法已被添加以替换
%
,尽管后者的语法在Python 3中仍然存在。@Tim:进行了一些扩展,给出了一些使用
%r
的参数。感谢您提供的信息。我没有遇到
.format()
到目前为止。我认为现在我将坚持使用
%s
,因为我认为它对于我的简单用例更具可读性。
return 'Foo(({0[0]:04d}, {0[1]:02d}))'.format(self.vals)