python
2017-05-01 8 views 0 likes 
0

Ich möchte der Variable String zuweisen und sie dann verwenden. Hier ist ein Teil meines Code:Python 2.7 Bildvariable

power = input() 
    if power == 1: 
     mode = "CONTOUR" 
    elif power == 2: 
     mode = 'EDGE_ENHANCE_MORE' 
    elif power == 3: 
     mode = EDGE_ENHANCE 
    else: 
     print "Wrong option" 
    try: 
     img = img.filter(ImageFilter.mode) 
     img.show() 
    except: 
     print "You should load image first" 

keine der Modus-Option funktioniert

+0

was meinst du die Option "funktioniert nicht"? – asongtoruin

+0

Wahrscheinlich sollten Sie 'EDGE_ENHANCE' aus Gründen der Kohärenz zwischen Anführungszeichen setzen. Erhalten Sie eine 'NameError' Ausnahme? –

+0

wenn ich tap 1, ich werde compilator nicht CONTOUR anstelle des Modus zu verwenden, bekomme ich diese Art von Fehler: Traceback (letzten Aufruf letzten): Datei "./edytor.py", Zeile 65, in img = img.filter (ImageFilter.mode) AttributeError: 'Modul' Objekt hat kein Attribut 'Modus' – Geperd

Antwort

1

ich mindestens zwei Dinge fangen kann: zuerst eine mögliche Nameerror bei Option 3 und zweite Sie möglicherweise eine Ausnahme Attribute essen.

Ein Catch-All except Klausel ist ein Code-Geruch, wird es die wahre Ursache der Fehlerbedingung maskieren. Versuchen Sie stattdessen, die except auf Ausnahmen zu begrenzen, die Sie erwarten, oder drucken Sie die Ausnahme, damit Sie auf das tatsächliche Problem hinweisen können.

Versuchen Sie folgendes:

power = input() 
if power == 1: 
    mode = "CONTOUR" 
elif power == 2: 
    mode = 'EDGE_ENHANCE_MORE' 
elif power == 3: 
    mode = "EDGE_ENHANCE" 
else: 
    print "Wrong option" 
try: 
    img = img.filter(getattr(ImageFilter, mode)) 
except Exception as e: 
    print "Ooops! Got a '{}' exception ({})".format(type(e), str(e)) 
else: 
    img.show() 

[update]

when i tap 1, i won t compilator to use CONTOUR in place of mode,i get this kind of error: Traceback (most recent call last): File "./edytor.py", line 65, in img = img.filter(ImageFilter.mode) AttributeError: 'module' object has no attribute 'mode'

Ja, wie ich vermutete. Dies wird versuchen, ein Attribut zuzugreifen namens ‚Mode‘ im ImageFilter Modul (und da das Modul keine mode Attribut hat, erhalten Sie die AttributeError):

ImageFilter.mode 

Sie wollen das nicht. Stattdessen möchten Sie ImageFilter.CONTOUR. Wie nennt man ein Attribut dynamisch in Python, wenn nur der Name in einer Variablen gespeichert ist? Etwas wie ImageFilter[mode] funktioniert in Javascript, aber nicht in Python. Nun, einfach genug, in Python müssen Sie verwenden getattr:

getattr(ImageFilter, "CONTOUR") 
+0

vielen Dank, es funktioniert: D – Geperd

Verwandte Themen