2016-05-27 4 views
1

をループしながら、私は2つのファイル持っている:main.pyとbatsol.py私のクラスには、私のコードの初めに呼び出し可能ではなく、私のテストは

batsol.pyはクラスとmain.pyが作成されて含まれているがクラスBatsolからのいくつかのインスタンス。 だから私は...あなたに

class Batsol: 
    def __init__(self, addressCan = None, name = None) : 
    self.addressCan = addressCan 
    self.name = name 
    #other stuff ... 

を私のコードの簡潔なバージョンを紹介しますそれから私のmain.py:

from batsol import Batsol 
# other import and code ... 

print(callable(Batsol)) 
bs1 = Batsol() 
# code... 
if len(listener.ring_buffer) == 0 : 
    for Batsol in tab_BS : 
     try: 
      print(tab_BS[Batsol]) 
     except (IndexError): 
      pass 
# code... 
while(True) : 
    # for and if interlocked 
    print(callable(Batsol)) 
    bs2 = Batsol() 

コンソールには示しています

True 
False 
Traceback (most recent call last): 
File "./main.py", line 135, in <module> 
bs2 = Batsol() 
TypeError: 'int' object is not callable 

第二部トレースバックの私は私のコードで行っている他のものにリンクされていません(スレッドは正常に終了していない...このような何か)、私の意見では

Exception ignored in: <module 'threading' from '/usr/lib/python3.4/threading.py'> 
Traceback (most recent call last): 
File "/usr/lib/python3.4/threading.py", line 1292, in _shutdown 
t = _pickSomeNonDaemonThread() 
File "/usr/lib/python3.4/threading.py", line 1300, in _pickSomeNonDaemonThread 
if not t.daemon and t.is_alive(): 
TypeError: 'bool' object is not callable 

なぜ私のテストループの中で私のオブジェクトがコール可能ではありませんか??? それは狂気私を駆動する...

+0

NP:P – Lamoule74

+1

は、あなたがどこかに#code 'には' Batsol = something'割り当てが存在しないことを確認しています... 'や'#interlocked'のためとあれば? –

+0

私たちが 'code ... 'にあるものを見ることができないとすると、もっともらしい理由は' Batsol'という名前に 'int'オブジェクトが割り当てられていることです。あなたは「まあ、明らかに私はそれをしないだろう」と考えようとしていますが、それを知る方法はありませんし、自分自身の誤ったコードの意見は常に疑わしいです。私はあなたが問題をhttp://sscce.org/に還元することを提案することができます。あなたのコードから 'code ...'を取り除くと、問題がなくなり、 'code ... '私たちは間違ったコードを見たことがないので、私たちはあなたを助けることはできません。 –

答えて

0

あなたのシャドウイングは、このコードの断片で発生します。シーケンスの

if len(listener.ring_buffer) == 0 : 
    for Batsol in tab_BS : 
     try: 
      print(tab_BS[Batsol]) 
     except (IndexError): 
      pass 
time.sleep(4) 

for-in構築物は、以下のように動作します

  1. シーケンスは、次の(第一、第二を求めています、...最後)要素。内部ポインタは、現在の反復の要素を追跡します。
  2. 要素は、 "in"の左側で名前に割り当てられます。ループが終了した後、1

から

  • 進み、Batsolはもはやあなたのクラスですが、tab_BSから最後の要素。

    私はこの種のエラーが容易に検出されるので、より良いIDEを得ること、または良いスタティックコード解析ツール(Pylint/Flake8など)を使用することをお勧めします。 PyCharm(あなたのコード、外側のスコープのシャドウ名)。

    関連:私は理解してHow bad is shadowing names defined in outer scopes?

  • +0

    それです!私はちょうどあなたがこれを投稿している間に間違いを見た... Tahnk you Rogalski! – Lamoule74

    関連する問題