Fehler bei Funktionsaufruf

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
µC-noob
User
Beiträge: 12
Registriert: Mittwoch 2. Januar 2008, 10:10

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ß
Sry???
blutiger Python-Anfänger!
The Spirit
User
Beiträge: 276
Registriert: Freitag 8. Juni 2007, 08:50
Wohnort: 84xxx Bereich
Kontaktdaten:

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
Erwin
User
Beiträge: 141
Registriert: Donnerstag 9. Juni 2005, 08:51

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.
Ich mache nie einen Fehler Zweimal.
Schließlich ist die Auswahl ja groß genug.
µC-noob
User
Beiträge: 12
Registriert: Mittwoch 2. Januar 2008, 10:10

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ß
Sry???
blutiger Python-Anfänger!
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

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.
Erwin
User
Beiträge: 141
Registriert: Donnerstag 9. Juni 2005, 08:51

@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.
Ich mache nie einen Fehler Zweimal.
Schließlich ist die Auswahl ja groß genug.
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

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....
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!?
µC-noob
User
Beiträge: 12
Registriert: Mittwoch 2. Januar 2008, 10:10

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ß
Sry???
blutiger Python-Anfänger!
Antworten