Python 2.7 中未知变量的打印值

Printing value of unknown variable in Python 2.7

我正在尝试在 Python 文件中打印一条语句,以便更好地了解我在何处遇到 AssertionError。这是代码:

    class test_rosenbrock_function(object):
       def __init__(self, dim=5):
         self.x = 0 <-- important point
         self.n = 2*dim
         self.dim = dim
         self.domain = [ (1,3) ]*self.n
         self.optimizer = differential_evolution_optimizer(self,rand_inputs,etc...)
         print 'x before for loop= ',self.x
         for x in self.x:
           print 'x in for loop test_rb: ',x
           assert abs(x-1.0)<1e-2

If 取决于我的文件中的一些不同的 类 和函数,它们都工作正常。我遇到的问题是试图了解调用 differential_evolution_optimizer 函数后 self.x 变量发生了什么。当我查看我的 shell 时,这是我得到的:

 --> x before for loop=  <scitbx_array_family_flex_ext.double object at 0x102b6bf70>
     x in for loop test_rb:  0.0
     Traceback (most recent call last):
       File "optimizer.py", line 270, in <module>
         run()
       File "optimizer.py", line 265, in run
         test_rosenbrock_function(1)
       File "optimizer.py", line 244, in __init__
         assert abs(x-1.0)<1e-2
     AssertionError

我的问题是如何打印 (-->) 语句,这样我才能真正读取 self.x 的值而不是它的类型和位置?

print 查看对象的 __str__ 方法。如果未定义 __str__ 方法,则 python 会查看对象的 __repr__ 方法。默认情况下,所有对象都有一个 __repr__ 方法 returns 类似于 '<type_of_object at memory_address>'.

如果您可以访问定义 class 的代码,解决方案是简单地在 class 上定义一个 __str__ 方法,returns 更多明智的。例如

class Foo(object):
    def __str__(self):
        return 'I am a Foo'

f = Foo()
print f  # I am a Foo

如果您无法(轻松)访问 class 定义所在的代码,那么最好的办法是打印一些 class 实例的属性。

很明显,该类型没有定义 __str__ 方法来很好地呈现其实例。自己做演示,例如,而不是 print(self.x)print(list(self.x)).

这段代码中有很多错误。首先,像 self.x(即 0)这样的 int 是不可迭代的,因此 for 循环根本不起作用。

如果你想打印 self.x 属性,你可以这样做:

    class test_rosenbrock_function(object):
        def __init__(self, dim=5):
            self.x = 0
            self.dim = dim
            #other code here

     Rosen = test_rosenbrock_function()
     print Rosen.x   #gives 0
     print Rosen.dim  #gives 5