Seite 1 von 1

Fehler bei Funktionsaufruf

Verfasst: Mittwoch 9. Januar 2008, 11:06
von µC-noob
Hi, ich weiß jetzt nicht genau in welches Forum das gehört??

Ich arbeite mit IDLE

Zum Problem,
ich möchte ein Skript entwerfen, in dem ich zwei funktionen habe, mit denen ich Arbeiten kann:

Code: Alles auswählen

import serial, time 

def setPin(pin): #set Pins without Toggle or anything else
    PinSet = 0
    sendString = 'Error: Pin does not exist'
    
    if pin < 1: #Useable Pins 1 ... 8
        return sendString
    elif pin > 8: #Useable Pins 1 ... 8
        return sendString
    else:
        PinSet = str(pin)
        ser = serial.Serial(5, 9600, bytesize=serial.EIGHTBITS, parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, timeout=1, xonxoff=0, rtscts=0) 
        ser.write("SETPIN\r")
        ser.write(PinSet)
        ser.write("\r")
        ser.close()
        return PinSet
    
def resetPin(pin): #reset Pins without Toggle or anything else
    PinReSet = 0
    sendString = 'Error: Pin does not exist'
    if pin < 1:
        return sendString
    elif pin > 8:
        return sendString
    else:
        PinReSet = str(pin)
        ser = serial.Serial(5, 9600, bytesize=serial.EIGHTBITS, parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, timeout=1, xonxoff=0, rtscts=0) 
        ser.write("RESETPIN\r")
        ser.write(resetPin)
        ser.write("\r")
        ser.close()
        return PinReSet
Beispielaufruf:

Code: Alles auswählen

import STO

STO.setPin(4)
STO.resetPin(2)
jetzt kommt eine Fehlermeldung:

Traceback (most recent call last):
File "C:\Dokumente und Einstellungen\dehartph\Desktop\Project_STO_Python\STO_test.py", line 13, in <module>
STO.resetPin(2)
AttributeError: 'module' object has no attribute 'resetPin'

Wo liegt mein Fehler??
Gruß

Verfasst: Mittwoch 9. Januar 2008, 11:16
von The Spirit
du nennst dein script STO_test.py willst es dann aber mit STO aufrufen.
Benenne mal dein script in STO.py um und versuchs dann nochmal

Verfasst: Mittwoch 9. Januar 2008, 11:29
von Erwin
The Spirit hat geschrieben:du nennst dein script STO_test.py willst es dann aber mit STO aufrufen.
Benenne mal dein script in STO.py um und versuchs dann nochmal
Glaube ich jetzt nicht, dass dies allein der Fehler ist.
Weil das Ausführende Script heißt ja so (STO_test).
Aber das, wo die Funktionen drin sind, wird, so vermute ich mal, STO.py heißen. Weil er es ja davon importiert.

Wenn dann stellt sich die Frage, findet er die Datei STO auch?
Ist die im gleichem Ordner wie das Haupt-Script?

Ansonsten werde ich aus dem Ganzen auch nicht schlau, was in meinem Fall leider nicht viel heißen muss.

Verfasst: Mittwoch 9. Januar 2008, 11:30
von µC-noob
Danke, aber ich denke nicht?!?

Mein Skript heißt
STO.py

Mein aufrufendes Modul
STO_test.py

beide befinden sich im gleichen Ordner


Im Modul STO_test steht

Code: Alles auswählen

import STO

STO.setPin(4)
STO.resetPin(2)
in STO.py steht der andere Code (siehe oben)


Und wenn ich NUR
STO.setPin(4)
aufrufe dann läuft es auch.

Gruß

Verfasst: Mittwoch 9. Januar 2008, 11:41
von Zap
Zur Not würde ich mal per Interactive Pythonshell in das Verzeichnis gehen und dort folgendes testen.

Code: Alles auswählen

>>> import STO
>>> STO
<module 'STO' from 'Pfad wo das Modul erwartet wird'>
>>> dir(STO)
[Liste aller verfügbaren Attribute]
Das sollte helfen denke ich.

Verfasst: Mittwoch 9. Januar 2008, 11:47
von Erwin
@Zap

Wenn er beides im gleichem Ordner hat, sollte es Python generell finden.
Das finde ich ja unter anderem so praktisch am Python.

Außerdem, das erste Modul (setPin) findet er ja auch. Und dies ist ja im gleichem Ordner * wie resetPin.

* edit: Meinte Script. Im gleichem Script.

Verfasst: Mittwoch 9. Januar 2008, 11:57
von Zap
Jaja, nur vielleicht hat er ja noch irgendwo anders eine alte STO.py liegen. (Vielleicht in der PythonLib)
Es reicht sonst auch ein einfaches print STO nach dem import.
Vielleicht zickt auch sein Editor rum der sein Skript nicht abspeichern will.
Oder die .pyc Datei aktualisiert sich aus irgendwelchen Gründen nicht beim Import. (Vielleicht an der SystemUhr gedreht ;) )
Auch die könnte man Testweise mal löschen und es erneut versuchen....

Verfasst: Mittwoch 9. Januar 2008, 11:58
von BlackJack
@µC-noob: Rufst Du `STO_test.py` auch als Programm auf oder wird das in irgendeiner "Umgebung" in der IDE ausgeführt, wo vielleicht noch ein altes importiertes `STO` existiert, was die zweite Funktion noch nicht kennt!?

Verfasst: Mittwoch 9. Januar 2008, 12:13
von µC-noob
Vielen Dank,... :D

ja, ich habe es mit dem IDLE ausgeführt.

Nachdem ich alle offenen IDLE - Files geschlossen und neu geöffnet habe, läuft es jetzt.

Danke!

Gruß