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
我正在尝试在 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