Forum: PC-Programmierung Python - 'bytes' object has no attribute


von Julia (Gast)


Lesenswert?

Hi,

kennt einer von euch diesen Fehler in Python?

bytes' object has no attribute 'function'

Ich versuche hier eine bytes-Variable an eine Funktion zu übergeben, 
teile zu extrahieren und als integer zurück zu geben. Der oben genannte 
Fehler tritt dann bei mir auf.

Aus dem Hauptprogramm:

variable=b'0000'
....
        if (datei.function(variable)) > 0:
            GPIO.output (14,GPIO.HIGH)

Aus dem Unterprogramm:

def function (variable):
    output=(int(variable[0:1],2))
    return Dir

Vielen Dank für die Hilfe,
Jule

von Eric B. (beric)


Lesenswert?

Also, ich mauss da mal den Glaskugel polieren...

Ich vermute dass:
1) der Aufruf von function in einer anderen Datei steht als seine 
Definition (wg. "Hauptprogramm" und "Unterprogramm"

1a) dieses "Unterprogramm" in einer Datei namens "datei.py" 
untergebracht ist

1b) du vergessen hast im "Hauptprogramm" ein "import datei" einzufügen.

2) function eher "output" zurückliefern soll als "Dir"

von Julia (Gast)


Lesenswert?

Hey,

danke erstmal.
Hier nochmal die relevanten Auszüge aus dem unveränderten Programm. 
Hatte versucht zu vereinfachen.


Hauptprogramm:

import ubit

...
data = b'0000000000000000000000000000000'

...
        if (ubit.dir_1(data)) > 0:
            GPIO.output (14,GPIO.HIGH)
        else:
            GPIO.output (14,GPIO.LOW)

das Unterprogramm:

def dir_1 (data):
    Dir=(int(data[0:1],2))
    return Dir

von Eric B. (beric)


Lesenswert?

main.py
1
import sub
2
3
print (sub.dir_1(b'0101'))

sub.py
1
def dir_1 (data):
2
    Dir=(int(data[0:1],2))
3
    return Dir

Resultat:
1
~ >python main.py
2
0
3
4
~ > _

Funktioniert einwandfrei...

von Julia (Gast)


Lesenswert?

Ok. Die Funktion hierß genau wie die Variable, die ich ursprünglich 
übergeben hatte... Anfängerfehler.

Danke :)

von Karl (Gast)


Lesenswert?

Julia schrieb:
> bytes' object has no attribute 'function'

Wenn man noch dazu schreiben würde, in welcher Zeile der Fehler auftritt 
würde sich die Arbeit deutlich vereinfachen.

von Karl (Gast)


Lesenswert?

Julia schrieb:
> data = b'0000000000000000000000000000000'
>
> ...
>         if (ubit.dir_1(data)) > 0:
>             GPIO.output (14,GPIO.HIGH)
>         else:
>             GPIO.output (14,GPIO.LOW)
>
> das Unterprogramm:
>
> def dir_1 (data):
>     Dir=(int(data[0:1],2))
>     return Dir

Man sollte auch überlegen, ob es sinnvoll ist in Python auf "Bit-Ebene" 
zu arbeiten. Die OO-Programierung bietet da besser lesbare Möglichkeiten 
und die Performance wird sicher auch nicht besser.

Ich weiß auch nicht was dass sein soll:

data = b'0000000000000000000000000000000'

In Python wird eine binäre Zahl als 0b.... geschrieben.

von Kaj (Gast)


Lesenswert?

Karl schrieb:
> data = b'0000000000000000000000000000000'
>
> In Python wird eine binäre Zahl als 0b.... geschrieben.
Warum denkt immer alle Welt das ein b'' in Python was mit binaer zu tun 
haette?
b'' bedeutet (in Python 3!) Byte-String, wohingegen das normale '' ein 
Unicode-String ist. Viele Funktionen, z.B. socket.send oder serial.write 
wollen einen Byte-String, keinen Unicode-String.
Erstmal schlau machen, dann schreiben...

Karl schrieb:
> Man sollte auch überlegen, ob es sinnvoll ist in Python auf "Bit-Ebene"
> zu arbeiten.
Sieht mir nach nem RPi aus. Ja, macht also Sinn.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.