Python try except 指令中的 while 循环

Python while loop in try except instruction

我有简单的代码:

def simpleMethod():
    try:
        list_to_app = []                                                                                  
        number_of_a = input('\nHow many a you want to create? ')
        number_of_a = int(number_of_a)
        for i in range(number_of_a):                                                           
            user_a = input('\nPlease type here some track: ')
            list_to_app.append(user_a.lower())                                          
    except ValueError:
        stderr.write('Type error - please provide an integer character')
simpleMethod()

我不想使用 while True:... 如何为这种流程制作一些循环(我认为 while 在这种情况下会很好):

  1. 用户类型非整数
  2. 节目显示Type error - please provide an integer character
  3. 程序回到1.步

这是一个简单的方法,但我卡住了。

添加一个while True循环来重复try块,直到它可以成功break。您可能还想 return 您正在构建的列表,以便调用者可以访问它:

def simpleMethod():
    list_to_app = []  

    while True:
        try:
            number_of_a = input('\nHow many a you want to create? ')
            number_of_a = int(number_of_a)
            break
        except ValueError:
            stderr.write('Type error - please provide an integer character')

    for i in range(number_of_a):                                                           
        user_a = input('\nPlease type here some track: ')
        list_to_app.append(user_a.lower())

    return list_to_app  # no point building a list you don't return!                          

tracks = simpleMethod()

构建列表的一种更简单的方法是推导——您实际上可以将几乎整个函数放在 while 内的单个推导语句中,因为异常将引发到外循环。您可能还想让函数名称更具描述性:

from typing import List

def get_user_tracks() -> List[str]:
    """Prompt the user for a list of tracks."""
    while True:
        try:
            return [
                input('\nPlease type here some track: ') 
                for _ in range(int(input('\nHow many a you want to create? ')))
            ]
        except ValueError:
            stderr.write('Type error - please provide an integer character')

tracks = get_user_tracks()