python
2017-05-01 20 views 0 likes 
0

私は文字列をvariableに代入して使いたいと思っています。オプション3で最初の可能NameErrorと第二あなたはおそらくはAttributeError例外を食べている:モードオプションのPython 2.7画像変数

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" 

どれも

+0

オプションは「機能しません」とはどういう意味ですか? – asongtoruin

+0

おそらく、一貫性のために引用符の間に 'EDGE_ENHANCE'を置くべきでしょう。あなたは 'NameError'例外を受け取りますか? –

+0

私が1をタップすると、私はモードの代わりにCONTOURを使用するためにコンパイラを獲得しました。この種のエラーが発生します:トレースバック(最新のコールが最後): ファイル "./edytor.py"、行65、 img = img.filter(ImageFilter.mode) AttributeError: 'module'オブジェクトに 'mode'属性がありません – Geperd

答えて

1

を、私は、少なくとも二つのことをキャッチすることができ働かない:ここに私のコードの一部です。

catch-all except節はコードの匂いで、エラー状態の本当の原因を隠します。代わりに、exceptを予期している例外に制限するか、例外を出力して、実際の問題についてヒントを得てください。私が疑われるとして、[更新]

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'

はい

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() 

はこれを試してみてください。これはImageFilterモジュールで「モード」と呼ばれる属性にアクセスしようとします(とモジュールが何mode属性を持っていないので、あなたはAttributeErrorを取得):

ImageFilter.mode 

あなたはそれを望んでいません。代わりに、ImageFilter.CONTOURが必要です。では、変数に名前が格納されていれば、Pythonでどのように属性を動的に呼び出すことができますか? ImageFilter[mode]のようなものはJavascriptでは動作しますが、Pythonでは動作しません。 Pythonでは、十分に簡単に使用する必要があります。getattr

getattr(ImageFilter, "CONTOUR") 
+0

ありがとう、それは動作します:D – Geperd

関連する問題