'module' object has no attribute 'rechne'

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
T-Bone
User
Beiträge: 10
Registriert: Mittwoch 16. Dezember 2009, 13:00

Das ist mir schon fast peinlich das ich das hier fragen muss ...

Ich probiere grad mit Websockets rum und wollt nun was einfaches probieren.

Ich habe folgende zwei Codes:

mathe.py

Code: Alles auswählen


from mod_pywebsocket import msgutil
import rechnen

def web_socket_do_extra_handshake(request):
    pass  # Always accept.


def web_socket_transfer_data(request):
    while True:
        line = msgutil.receive_message(request)

        e = rechnen.rechne('1+2')
           
           
        msgutil.send_message(request, e)
     
       return       

und rechnen.py

Code: Alles auswählen

def rechne(line):

    zahlen = line.split('+')

    ergebnis = zahlen[0] + zahlen[1]    
    return ergebnis


(so wird wohl in Python nicht gerechnet aber es ergibt ein Ergebnis)

mathe.py ist die Datei die angesteuert wird aus der HTML Seite was auch funktioniert.

Öffne ich pythonw.exe (dafür gibt es doch sicher einen Begriff oder?) und öffne daraus die Datei mathe.py und drücke F5 und gebe dann rechnen.rechne('1+2') ein erhalte ich als Ergebnis 12

Steuer ich jedoch mathe.py aus der HTML Datei an erhalte ich in der Konsole den Fehler (ich muss für die Websockets in der Konsole eine Datei standalone.py aufrufen die Fehler zurück gibt)

'module' object has no attribute 'rechne'

Geb ich in mathe.py e den Wert 'du' erhalte ich im Browser auch "du" als Ausgabe also scheint er rechnen.rechne nicht schlucken zu wollen.


Nicht bös sein , ich bin totaler Anfänger in Python und ich bemühe mich
selbstverständlich meine Probleme selbst mit Google zu lösen aber
das hab ich jetzt die letzten 2 Stunden nicht geschafft.

Guten Morgen wünsch ich.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Ebenfalls "'Guten Morgen".

Dass er nicht "rechnet" liegt daran, dass du nicht zwei Zahlenwerte, sondern zwei Zeichenketten mittels "+" verknüpfst: Deine Funktion rechne() zerlegt eine Zeichenkette der Form "<a>+<b>" zunächst in "<a>" und "<b>" um sie anschließend ohne das "+" wieder zusammenzusetzen ...

Für eine anständige Lösung (und damit meine ich jetzt nicht einfach "funktionierende Lösung", denn da gibt es noch eine quick'n dirty Lösung, die ich aus gutem Grund nicht angeben werde) müsstest du die Zeichenketten zuvor in Zahlenwert umwandeln.

Was deine 2 Stunden mit google angeht. Ich empfehle stattdessen mit dem Durcharbeiten des Tutorials zu beginnen. Das dauert zwar länger als 2 Stunden, führt aber auf jeden Fall zu Erfolgen: http://tutorial.pocoo.org/
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Code: Alles auswählen

def rechne(s):
	return sum(map(int, s.split("+")))

print rechne("1+2+3+4")
Stefan
T-Bone
User
Beiträge: 10
Registriert: Mittwoch 16. Dezember 2009, 13:00

Hey danke für die Antworten und die Beispiellösung.
Die Beispiellösung funktioniert wenn ich pythonw.exe -> öffnen -> mathe.py -> F5 und dann rechnen.rechne('1+5') eintippe krieg ich 6 raus aber

ich hab immernmoch das Problem das ich folgenden Fehler kriege wenn ich
die Datei mathe.py aus der HTML Datei ansteuer:

[WARNING] root: mod_pywebsocket: web_socket_transfer_data raised exception for /mathe: 'module' object has no attribute 'rechne'

Mir geht es auch eigentlich erstmal nicht ums rechnen sondern überhaupt um eine Ausgabe.

Ich habe auch nicht gemeint das ich Stunden suchte nach der Lösung fürs rechnen sondern um die rechnen.py per import einzubinden und dann die Funktion rechnen.rechne benutzen zu können in mathe.py

Ist doch richtig so oder nicht?

Code: Alles auswählen

import rechnen.py

...

e = rechnen.rechne('1+5')
Das Tutorial werd ich mir nun auch mal angucken, danke für den Link
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

T-Bone hat geschrieben:Ist doch richtig so oder nicht?

Code: Alles auswählen

import rechnen.py

...

e = rechnen.rechne('1+5')
Das Tutorial werd ich mir nun auch mal angucken, danke für den Link
Nein, ist es nicht ;-) Im Tutorial steht drin, wie man Module importiert.
Das Leben ist wie ein Tennisball.
T-Bone
User
Beiträge: 10
Registriert: Mittwoch 16. Dezember 2009, 13:00

Ups, hab beim telefonieren statt import rechnen , import rechnen.py eingegeben und das weiss ich das das so nicht richtig ist.

Da steht
Ein Modul ist eine Datei, die Python-Definitionen und -Anweisungen beinhaltet. Der Dateiname mit dem .py-Suffix entspricht dem Namen des Moduls.
also ist der Modulname , wenn ich

Code: Alles auswählen

import rechnen 
eingebe , rechnen , richtig?
Dieser Befehl fügt die von fibo.py definierten Funktionen nicht automatisch in die globale Symboltabelle (symbol table) ein, sondern nur den Modulnamen fibo. Um die Funktionen anzusprechen, benutzt man den Modulnamen:


>>> fibo.fib(1000)
macht doch dann bei mir rechnen.rechne('1+5')
oder nicht?

Ich seh das leider nicht anders ...

Quelle: http://tutorial.pocoo.org/modules.html
T-Bone
User
Beiträge: 10
Registriert: Mittwoch 16. Dezember 2009, 13:00

Mag mir denn keiner bei diesem, wohl sehr kleinen, Problem helfen?
Ich hab es ,so peinlich es auch ist, nicht hinbekommen.

Ich möcht doch nur schön alles von einander trennen...
So einen schlechten Start hat ich noch nie in einer Sprache.

Helft mir doch bitte :?
BlackJack

@T-Bone: Wie sieht das Problem denn jetzt *genau* aus?
T-Bone
User
Beiträge: 10
Registriert: Mittwoch 16. Dezember 2009, 13:00

Also ich hab jetzt einmal mathe_wsh.py

Code: Alles auswählen

from mod_pywebsocket import msgutil
import rechnen



def web_socket_do_extra_handshake(request):
    pass  # Always accept.


def web_socket_transfer_data(request):
    while True:
        line = msgutil.receive_message(request)

        e = rechnen.rechne(line)

        e = str(e)

           
        msgutil.send_message(request,e)
        if line == _GOODBYE_MESSAGE:
            return       
        


und will die Datei rechnen.py importieren.
Diese Datei befindet sich im selben Ordner wie mathe_wsh.py.

Steuer ich dann mathe_wsh.py aus der HTML Datei an dann wird mir in der Konsole

[WARNING] root: mod_pywebsocket: web_socket_transfer_data raised exception for /mathe: 'module' object has no attribute 'rechne'

ausgespuckt.


Was ich nun mal probiert habe, was auch funktioniert, ist das ich die Datei in den Ordner ...\python24\Lib\site-packages\mod_pywebsocket gepackt habe und dann in mathe_wsh.py

Code: Alles auswählen

from mod_pywebsocket import rechnen
angegeben habe.
Das geht ist aber nicht gewollt. Ich würde schon gerne die Scripte von mehreren Projekten getrennt aufbewahren können.

Wird denn nicht im selben Verzeichnis wo das ausgeführte Script sich befindet gesucht ?

Ich denke doch denn wenn ich pythonw.exe starten, mathe_wsh.py öffne und F5 drücke und dann rechnen.rechne('1+1') eingebe wird 2 angezeigt.

Deswegen versteh ich auch nicht warum es denn nicht geht wenn ich aus meiner HTML Datei mathe_wsh.py ansteuer.
Benutzeravatar
Defnull
User
Beiträge: 778
Registriert: Donnerstag 18. Juni 2009, 22:09
Wohnort: Göttingen
Kontaktdaten:

Liegt sonst noch irgendwo ne 'rennen.py' rum, die aus versehen statt der richtigen importiert wird?
Bottle: Micro Web Framework + Development Blog
T-Bone
User
Beiträge: 10
Registriert: Mittwoch 16. Dezember 2009, 13:00

Nein, die Datei gibt es nur 2 mal und es ist exakt die selbe.

Einmal im selben Ordner wie mathe_wsh.py

und dann nun nochmal im
Python Order .../site-packages/mod_pywebsocket also
da wo mod_pywebsocket installiert ist
und mit

from mod_pywebsocket import rechnen

wird dann aus dem ../site-packages/mod_pywebsocket die Datei rechnen.py geladen , nehm die die nämlich da raus geht es auch nicht mehr.

Edit:
Problem endlich gelöst.

Ich hab im site-packages Ordner eine datei mit der Endung pth erstellt und dort den Pfad angegeben in dem math.py und rechnen.py liegen.
Der Name von der pth Datei ist egal.

Wenn eine pth Datei vorhanden ist soll man diese erweitern.
Hab ich bei Google gefunden.

Sollte vielleicht nicht so sein aber es geht und das ist mir wichtig.
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

Wäre schön, wenn solche Informationen(dass du versuchst hast irgendwelche Pfade zu verbiegen) mal gleich gekommen wären. Dann hätte man dir auch helfen können. Vermutlich hätte sich das Problem einfach dadurch lösen lassen, dass du den ganzen-Site-Packages-Kram weglässt nur nur die Datei in deinem Programmordner lässt(btw. es gibt nicht noch zufällig irgendwelche Ordner die rechnen heißen?).
T-Bone
User
Beiträge: 10
Registriert: Mittwoch 16. Dezember 2009, 13:00

Darii hat geschrieben:Wäre schön, wenn solche Informationen(dass du versuchst hast irgendwelche Pfade zu verbiegen) mal gleich gekommen wären.
Wo hab ich denn vorgehabt "Pfade zu verbiegen"?

Es gab rechnen.py nur einmal , im selben Order wie mathe.py.
Es gab die Datei nur ein einziges mal auf dem PC.
Es gibt keinen anderen Ordner der rechnen heisst auf dem PC.

Weil es trotz dieser umständen nicht funktioniert hat habe ich dann

rechnen.py in den site-packages Ordner kopiert.
Es dann mit

from mod_pywebsocket import rechnen

probiert damit ich rausfinde ob das geht und dann festgestellt das es geht.

Hab ich aber doch auch alles schon geschrieben.
Ich seh dein Problem nicht.
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

Du versuchst immer noch, den zweiten Schritt vor dem ersten zu machen. Meine Empfehlung: Alles nochmal neu installieren und dann das Tutorial durcharbeiten, bevor du dich an wsgi ausprobierst.
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

T-Bone hat geschrieben:Ich seh dein Problem nicht.
Eben hast du noch von 2 Dateien gesprochen, jetzt ist es wieder eine? Aus deinem vorletzten Post ist wirklich nicht zu ersehen, wie genau du vorgegangen ist.

Deiner Problembeschreibung zufolge müsste das, was du versucht, eigentlich funktionieren. Da es das nicht tut, ist anzunehmen, dass noch irgendeine wichtige Information fehlt.
T-Bone
User
Beiträge: 10
Registriert: Mittwoch 16. Dezember 2009, 13:00

Ich kanns nicht besser erklären und ich finde es auch verständlich (wär ja auch schlimm wenn nicht :D )

Ich habe ja mittlerweile eine Lösung gefunden und sie genannt.
Mir ist nun egal warum es ohne die pth Datei nicht funktioniert , hauptsache es funktioniert jetzt.


Bei einem erneuten Problem werde ich versuchen es konkreter zu beschreiben.
Vielen Dank für die Hilfe , ohne hätte ich warcheinlich schon aufgegeben.
Dann arbeite ich mal weiter


:)
Antworten