Pertanyaan Dapatkan pernyataan Coba untuk mengulang sampai nilai yang benar diperoleh


Saya mencoba untuk mendapatkan pengguna untuk memasukkan nomor antara 1 dan 4. Saya memiliki kode untuk memeriksa apakah nomor tersebut benar tetapi saya ingin kode untuk berputar beberapa kali sampai angka-angkanya benar. Adakah yang tahu cara melakukan ini? Kode di bawah ini:

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

Saya juga mendapatkan kesalahan tentang pengecualian yang saya masukkan:

kill.py:20: DeprecationWarning: catching of string exceptions is deprecated
  except 'incorrect':
Error

Terima kasih atas bantuannya


12
2018-02-11 12:09


asal


Jawaban:


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'

29
2018-02-11 12:19



Pengecualian Python modern adalah kelas; dengan menggunakan raise 'incorrect', Anda menggunakan fitur bahasa yang tidak digunakan lagi yang disebut pengecualian string. Itu Kesalahan dan Pengecualian bagian dari tutorial Python akan menjadi tempat yang baik untuk memulai dengan penanganan exception dasar dengan Python.

Secara umum, pengecualian tidak ideal untuk situasi Anda - sederhana while lingkaran harus cukup. Pengecualian harus disediakan untuk situasi yang luar biasa, dan masukan pengguna yang buruk tidak luar biasa, sangat diharapkan.

Versi berbasis loop dari Release akan terlihat seperti ini:

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)

P.S. a adalah nama variabel yang buruk; Anda mungkin harus mengubahnya chosen_option atau semacam itu.


5
2018-02-11 12:13



Pendekatan Anda tampaknya menjadi cara yang sangat bertele-tele untuk mencapai sesuatu yang cukup sederhana:

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

4
2018-02-11 12:14



Anda berdua melempar dan menangkap pengecualian dalam blok kode sederhana yang sama - ini tidak benar-benar tentang apa yang dimaksud dengan penanganan pengecualian. Anda dapat melakukannya dengan lebih baik dengan melepaskan lingkaran atau dengan menjaga kondisi. Misalnya.:

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!'

EDIT: Menambahkan pengecekan error di int parsing.


3
2018-02-11 12:17



Daripada menggunakan pengecualian, Anda dapat melakukan sesuatu seperti ini:

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

2
2018-02-11 12:19



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)

1
2018-02-11 12:35