ユーザーに1から4までの数値を入力させようとしています。数値が正しいかどうかを確認するコードがありますが、数値が正しくなるまでコードを数回ループさせる必要があります。誰でもこれを行う方法を知っていますか?コードは以下のとおりです。
def Release():
try:
print 'Please select one of the following?\nCompletion = 0\nRelease ID = 1\nVersion ID = 2\nBuild ID = 3\n'
a = int(input("Please select the type of release required: "))
if a == 0:
files(a)
Elif a == 1:
files(a)
Elif a == 2:
files(a)
Elif a == 3:
files(a)
else:
raise 'incorrect'
except 'incorrect':
print 'Try Again'
except:
print 'Error'
Release()
入力した例外に関するエラーも表示されます。
kill.py:20: DeprecationWarning: catching of string exceptions is deprecated
except 'incorrect':
Error
助けてくれてありがとう
def files(a):
pass
while True:
try:
i = int(input('Select: '))
if i in range(4):
files(i)
break
except:
pass
print '\nIncorrect input, try again'
現代のPython例外はクラスです。 raise 'incorrect'
を使用すると、文字列の例外と呼ばれる非推奨の言語機能を使用できます。 Pythonチュートリアルの Errors and Exceptions セクションは、Pythonでの基本的な例外処理から始めるのに適しています。
一般に、例外はとにかく状況に理想的ではありません。単純なwhile
ループで十分です。例外は例外的な状況のために予約する必要があり、ユーザーの不適切な入力は例外的ではありません。
Release
のループベースのバージョンは次のようになります。
def Release():
a = None
while a not in (0, 1, 2, 3):
print 'Please select one of the following?\nCompletion = 0\nRelease ID = 1\nVersion ID = 2\nBuild ID = 3\n'
try:
a = int(input("Please select the type of release required: "))
except ValueError:
pass # Could happen in face of bad user input
files(a)
追伸a
は不適切な変数名です。おそらくchosen_option
またはそのようなものに変更する必要があります。
あなたのアプローチは、かなり単純なものを達成するための非常に長い時間のかかる方法のようです:
def Release() :
while True :
print 'Please select one of the following?\nCompletion = 0\nRelease ID = 1\nVersion ID = 2\nBuild ID = 3\n'
a = int(input("Please select the type of release required: "))
if 0 <= a < 4 :
files(a)
break
else :
print('Try Again')
同じ単純なコードブロックで例外のスローとキャッチの両方を行っています-これは、例外処理の目的ではありません。ループから抜け出すか、条件を維持することで、より適切に実行できます。例えば。:
def isNumberCorrect(x):
return x in range(4)
def Release():
num = None # incorrect
while not isNumberCorrect(num):
print 'Please select one of the following?\nCompletion = 0\nRelease ID = 1\nVersion ID = 2\nBuild ID = 3\n'
num_str = raw_input("Please select the type of release required: ")
try:
num = int(num_str)
except ValueError:
num = None
if not isNumberCorrect(num):
print 'Incorrect!'
# work with num here; it's guaranteed to be correct.
if __name__ == '__main__':
try:
Release()
except:
print 'Error!'
編集: int解析にエラーチェックを追加しました。
例外を使用する代わりに、次のようなことができます:
...
a = raw_input("Please select the type of release required:")
while a not in ['0','1','2','3']: a = raw_input("Try again: ")
files(int(a))
...
def Release():
while 1:
print """Please select one of the following?
Completion = 0
Release ID = 1
Version ID = 2
Build ID = 3
Exit = 4 """
try:
a = int(raw_input("Please select the type of release required: "))
except Exception,e:
print e
else:
if a==4: return 0
files(a)