2016-05-27 12 views
1

I 2 Dateien haben: main.py und batsol.pyMeine Klasse ist am Anfang meines Codes aufrufbar, aber nicht während meiner Tests Schleifen

batsol.py eine Klasse enthalten und main.py schafft einige Instanzen aus der Klasse Batsol. Also werde ich Ihnen eine kurze Version meiner Code zeigen ...

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

Dann ist mein 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() 

Die Konsole zeigt:

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

den zweiten Teil der Traceback ist nicht mit anderen Sachen verbunden, die ich in meinem Code tue (Thread nicht ordnungsgemäß beendet ... so etwas), meiner Meinung nach

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 

WARUM ist mein Objekt in meinen Testschleifen nicht aufrufbar ??? Es macht mich verrückt ...

+0

np Ich verstehe: P – Lamoule74

+1

Sind Sie sicher, dass es keine 'Batsol = something' Zuordnung irgendwo in' #code ... 'oder' # für und wenn interlocked'? –

+0

Der wahrscheinlichste Grund dafür, dass wir nicht sehen können, was in 'code ...' ist, ist, dass etwas darin dem Namen 'Batsol' ein' int'-Objekt zugewiesen hat. Du wirst denken: "Nun, natürlich würde ich das nicht tun", aber das können wir unmöglich wissen, und die eigene Meinung über den eigenen fehlerhaften Code ist immer suspekt. Ich kann nur vorschlagen, dass Sie das Problem auf eine http://sscce.org/ reduzieren. Wenn das Entfernen von 'code ...' aus Ihrem Code das Problem beseitigt, dann liegt es an etwas in 'code ...' und Sperrung Psychisches Debugging können wir dir nicht helfen weil wir den fehlerhaften Code nicht gesehen haben. –

Antwort

0

Ihr Shadowing in diesem Codefragment auftritt:

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

for-in auf Sequenzen konstruieren funktioniert wie folgt:

  1. Sequenz für das nächste gefragt wird (erste, zweite , ... letztes) Element. Der interne Zeiger verfolgt das Element in der aktuellen Iteration.
  2. Element wird dem Namen auf der linken Seite von "in" zugewiesen.
  3. Zum 1.

Nach Schleife beendet ist, ist Batsol nicht mehr die Klasse, aber letztes Element aus tab_BS.

Ich würde vorschlagen, eine bessere IDE zu bekommen, oder mit guten statischen Code-Analyse-Tool (Pyint/Flake8 etc.), wie diese Art von Fehler leicht durch z. PyCharm (Ihr Code Schatten Name aus äußeren Bereich).

Verwandte: How bad is shadowing names defined in outer scopes?

+0

Das war's! Ich habe gerade den Fehler gesehen, während du dies postest ... Tahnk du Rogalski! – Lamoule74