【问题标题】:Python while loop in try except instruction尝试中的Python while循环除了指令
【发布时间】:2021-03-09 16:15:51
【问题描述】:

我有简单的代码:

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:... 这样的东西 如何为这种流程制作一些循环(我认为在这种情况下会很好):

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

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

【问题讨论】:

  • 为什么不想使用while 循环?这确实是最简单的方法。
  • 为什么不“当真”?这是一些有问题限制的作业吗?

标签: python while-loop try-except


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-17
    • 1970-01-01
    • 2021-02-15
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 2018-02-28
    • 1970-01-01
    相关资源
    最近更新 更多