2015-01-13 3 views
0

나는 AssertionError를 어디에서 얻고 있는지 더 잘 이해하기 위해 Python 파일로 문장을 인쇄하려고합니다. 코드는 다음과 같습니다.Python 2.7에서 알 수없는 변수의 값 인쇄

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 

내 파일의 여러 클래스와 함수가 모두 정상적으로 작동하는지 여부에 따라 다릅니다. 내가 겪고있는 문제는 differential_evolution_optimizer 함수가 호출 된 후 self.x 변수에 어떤 일이 일어 났는지 이해하려고 시도하는 것입니다. 나는 내 껍질에서 볼 때, 이것은 내가 무엇을 얻을 :

--> 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의 값을 읽을 수 있습니다 (>) 한 Statment 및 어디에 위치해 있나?

답변

1

명백하게 그 유형은 그 인스턴스를 멋지게 표현하는 방법을 __str__으로 정의하지 않습니다. print(self.x) 대신 print(list(self.x)) 대신 프레젠테이션을 직접 해보세요.

+0

이 내가 필요 정확히 무엇을했다, 감사합니다! – ibanez221

0

print은 개체의 __str__ 메서드를 조사합니다. __str__ 메서드가 정의되어 있지 않으면 python은 개체의 __repr__ 메서드를 봅니다. 기본적으로 모든 개체에는 과 같은 값을 반환하는 __repr__ 메서드가 있습니다.

클래스가 정의 된 코드에 액세스 할 수 있다면 해결 방법은 좀 더 현명한 것을 반환하는 클래스에 __str__ 메서드를 간단히 정의하는 것입니다. 예 : 클래스 정의가 어디 당신이 코드를 (쉽게) 액세스 할 수없는 경우

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

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

은, 당신의 가장 좋은 방법은 클래스 인스턴스 '속성의 일부를 인쇄하는 것입니다.

0

이 코드에는 많은 오류가 있습니다. 첫째, 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 
관련 문제