Seite 1 von 1

DaSch Fehler Thread

Verfasst: Freitag 30. März 2007, 19:48
von DaSch

Code: Alles auswählen

#!/usr/bin/python
import sys
class costumer:
    def __init__(self, atractivity, persons, publicity):
        #atractivity, publicity 0<x<1
        #persons, persons in range
        costumers=-1
        if 0<atractivity<1 and 0<publicity<1:
            print("A an P are OK")
            costumers=((atractivity+publicity)/2)*persons
        else:
            print("Error with A or P")
        return costumers
print costumer(None,0.4,100,0.5)
Ich krieg hier folgenden Fehler
Traceback (most recent call last):
File "costumer.py", line 14, in ?
print costumer(None,0.4,100,0.5)
TypeError: __init__() takes exactly 4 arguments (5 given)
Könnt ihr mir das erklären?

Re: Irgend einkomischer Fehler

Verfasst: Freitag 30. März 2007, 19:52
von Leonidas
Gleich vorweg: ich habe den Thread verschoben. Könntest du dem Thread auch noch einen besseren Namen geben?

DaSch hat geschrieben:Könnt ihr mir das erklären?
Ja, der erste Parameter bei Klassen wird implizit übergeben. Also musst du das None weglassen beim Aufruf. Überhaupt sollten Klassennamen mit Großbuchstaben beginnen, so erkennt man einfacher dass da eine Klasseninstanz gebildet wird und keine Funktion aufgerufen wird.

Verfasst: Samstag 31. März 2007, 16:37
von DaSch
kann mir jemand erklären was mir diese Fehlermeldung sagt
NameError: global name '_' is not defined

Verfasst: Samstag 31. März 2007, 17:07
von EyDu
DaSch hat geschrieben:kann mir jemand erklären was mir diese Fehlermeldung sagt
NameError: global name '_' is not defined
Ist doch ganz klar: Der name "_" ist nicht definiert.

Der Unterstrich wird als Name im interaktiven Interpreter (bspw. IDLE) verwendet, damit man sich den letzten Rückgabewert einer Funktion anzeigen lassen kann:

Code: Alles auswählen

>>>def returner():
       return 4
>>>returner()
4
>>>_
4

Im "normalen" Interpreter hingegen, wird der Rückgabewert einer Funktion nach ihrem Aufruf nicht implizit an den Namen "_" gebunden, sondern man muss dies selber tun (wenn man denn will):

Code: Alles auswählen

def returner():
    return 4
my_name = returner()
Der Unterstrich als Name hat also in echten Python-Scripts nichts zu suchen, nur in der interaktiven Umgebung.

EDIT: Was mir an deinem Code noch auffällt: Ein "return" macht in einem Konstruktor "__init__(...)" keinen Sinn. Vielleicht solltest du dir moch mal einige Grundlagen zu OOP und Python anschauen.

Verfasst: Samstag 31. März 2007, 18:08
von DaSch
ja ich bin grad dabei mir das so langsam zu erarbeiten, danke trotzdem für deine Erklärung hat mir schon gut weitergeholfen

Verfasst: Sonntag 1. April 2007, 20:20
von DaSch
kann maneiner Funktion irgendwie sagen dass sie warten soll, also dass die quasi nichts tut und nach einer bestimmten Zeit einfach wieder weitermacht?

Verfasst: Sonntag 1. April 2007, 20:31
von Craven
Meinst du vl

Code: Alles auswählen

import time
time.sleep(x)
?

Verfasst: Sonntag 1. April 2007, 20:32
von DaSch
thx das hab ich jetzt gerade endlich auch gefunden :)

Verfasst: Sonntag 1. April 2007, 21:07
von DaSch

Code: Alles auswählen

        progress = SendMail(self)
        progress.Show()
        progressbar = progress.gauge_send
        progressbar.Show()
        time.sleep(1)
        progressbar.SetValue(10)
        time.sleep(1)
        progressbar.SetValue(20)
        time.sleep(1)
        progressbar.SetValue(30)
        time.sleep(1)
        progressbar.SetValue(50)
        time.sleep(1)
        progressbar.SetValue(100)
Also ich hab hier so ein Stück aus meinem Prog da sollte erstmal das Fenster mit dem Mailer und die Progressbar angezeigt werden und dann sollte sich da der Wert halt ändern. Aber irgendwie funktioniert das nicht. Der öffnet das Fenster erst ganz am Ende

Verfasst: Sonntag 1. April 2007, 21:31
von DaSch
also hab nun die Lösung selbst gefunden
wx.Dialog.RequestUserAttention(progress)
das holt das Fenster nach vorne so dass man es sieht, dass muss man nach jeder ändernung einfügen.

Verfasst: Sonntag 1. April 2007, 21:36
von birkenfeld
Ich glaube nicht, dass das die richtige Funktion ist.

Du suchst wohl eher wx.SafeYield().

Verfasst: Sonntag 1. April 2007, 21:47
von DaSch
was ist daran anders, also so wie ich des jetzt gemacht habt funktioniert des zumindest so wie ich es haben will

Verfasst: Montag 2. April 2007, 09:45
von DaSch
Xlib: unexpected async reply (sequence 0x352)!
Was ist das für ein Fehler? Ist das ein Bug in python oder im XServer oder sowas?

Verfasst: Montag 2. April 2007, 10:54
von rafael
DaSch hat geschrieben:
Xlib: unexpected async reply (sequence 0x352)!
Was ist das für ein Fehler? Ist das ein Bug in python oder im XServer oder sowas?
Ich denke mal das 0x352 ist ein Zeichen (Umlaut oder so...), was nicht richtig dargestellt wird(werden kann).

Verfasst: Montag 2. April 2007, 10:57
von DaSch
ich hab aber in dem Prog keine Umlaute

Verfasst: Montag 2. April 2007, 15:16
von Leonidas
Wo genau tritt der Fehler denn auf? Bisher hast du uns nur eine Zeile gegeben und daraus sollen wir schlau werden. So einfach ist das aber nicht.

Verfasst: Montag 2. April 2007, 16:44
von DaSch
also der Fehler tritt im Zusammenhang mit wxPython auf und bedeute wohl soweit ich das erahnen kann dass ein Fenster zum zweiten mal initialisiert wurde