2016-09-25 11 views
-1

私は自分のコードを使ってメッセージを暗号化/復号化しています。今はコードをちょっと整理しようとしていますが、エラーキャッチを追加しようとしています。私はこのエラーを関数内でキャッチするようにしたいので、コードの1ブロック内に6回のようなエラーをキャッチする必要はありません。Python 3関数内で変数を定義しています

c = 1 
list = ['Y', 'N'] 
test1 = "H" 

def f(test1): 
    while c == 1: 
      try: 
        test1 = raw_input("Input something yo") 
        if test1 not in list: 
          raise ValueError("Enter Y or N") 
        else: 
          return test1 
          break 
      except ValueError as error: 
        print (error) 

a = f 
a(test1) 

a = test1 
print (a) 
if a == "Y": 
    print ("Yes") 
else: 
    print ("No") 

これはこれを実践するためのテストです。しかし、私はそれを成功させることができませんでした。したがって、このコードでは、ユーザー入力として「Y」または「N」のいずれかを定義したいと考えています。私は、関数fを呼び出すし、test1は変数名です。私は関数が実行された後にtest1になるようにしたい。したがって、関数が実行中で、ユーザーが "Y"を入力すると、 "Yes"が出力されます。そうでない場合、「No」が印刷されます。私の実際のスクリプトでは、この関数から返される値として複数の値を定義する必要があります。なぜなら、エラーキャッチプロセスを何度もタイプしたくないからです。ユーザーが "Y"または "N"を入力しなかった場合は、再度入力する必要があります。それはちょうど私が問題を抱えている値test1を返すだけです。現時点で

、TEST1は常に「H」ですが、私はそのラインを持っていない場合、私はこのエラーを取得する:

Traceback (most recent call last): 
    File "FuncTest.py", line 19, in <module> 
     a(test1) 
NameError: name 'test1' is not defined 

任意のアイデア私はこの問題を解決することができますか?事前にみんなありがとう! :D

+0

なぜ値を関数に渡してすぐに破棄するのですか?関数呼び出しの外で生の入力を移動して渡すか、引数を渡すための要件を削除します。現時点では、未定義の変数を引数として渡しているため、エラーになります。 –

+0

キース私はあなたが何を意味するか分かりません。私はそれがちょっと面倒であることを知っている、私はそれをきれいにするが、今は単なるテストです。私はちょうど値test1を返す方法を知りたいので、もしそれが "Y"なら "はい"を印刷するか、そうでなければ "いいえ"を印刷します。値が返されないように見えるのは、常に「いいえ」と表示されるからです。 – Javid

+0

test1が定義されていないというエラーが表示されているのは、その定義を削除しているためです。 (あなたの例の3行目)。私のより完全な答えを今私は携帯電話ではない参照してください –

答えて

0

test1の定義を削除するときに、例の行3を削除するとエラーが発生します。

次のように同じコードのより一般的なアプリケーションがあり、それらを返すために、関数に値を渡す必要ありませんです。

def wait_and_validate (validation_list): 
    while True: 
     the_input= raw_input("Input something yo") 
     if the_input not in validation_list: 
      raise ValueError("Input not In Validation List") 
     return the_input 
try: 
    valid_input = wait_and_validate(['Y', 'N']) 
except ValueError as error: 
    print(error) 
#do stuff with valid_input 

あなたはかなり異なる戻り値を実験することを望むかもしれませんエラーを起こすよりも公式の知恵が何であるかはわかりませんが、再利用の容易性の観点からタプルを返すことはおそらく処理が簡単で、検証関数にエラーを定義することを節約します(つまり、プログラムの部分に応じて別々に扱いたいかもしれません)再)。

関連する問題