Python 如果用户输入“while”,如何中断while循环并转到finally块;“完成”;

Python 如果用户输入“while”,如何中断while循环并转到finally块;“完成”;,python,python-3.x,try-except,Python,Python 3.x,Try Except,重构逻辑NameError不会发生,而且finally不需要……只要在“finally”完成时将其放在while之外即可 这段代码看起来像是针对Python2.x的,其中input()尝试计算输入,如果键入的字符串不是变量名,则发出错误信号。当您键入done时,Python3.x不会发出错误信号 因此,只需比较输入。您可以稍后在尝试将其转换为int时执行错误检查 nums = [] while True: num = input('Enter a number or "done": '

重构逻辑
NameError
不会发生,而且
finally
不需要……只要在“finally”完成时将其放在while之外即可


这段代码看起来像是针对Python2.x的,其中
input()
尝试计算输入,如果键入的字符串不是变量名,则发出错误信号。当您键入
done
时,Python3.x不会发出错误信号

因此,只需比较输入。您可以稍后在尝试将其转换为
int
时执行错误检查

nums = []

while True:
    num = input('Enter a number or "done": ')  # num is a string at this point
    if num == 'done':
        break
    try:
        # try to convert num to integer...
        num = int(num)  # This can fail with ValueError, so is in try
        nums.append(num)   # This won't run if above raises exception
    except ValueError:
        print("Invalid input")

# No need to sort...
print("Maximum", max(nums)) 
print("Minimum", min(nums))

除之外的
将如何被触发?为什么要使用finally?为什么不对“完成”处理中的最小值/最大值进行排序和计算?这是否回答了您的问题?你需要重新设计你的逻辑。
namererror
永远不会发生,也永远不会等于
'done'
。另外,
l.sort()
和后面的所有内容都应该在循环之外。不,因为他使用ValueError,我想使用NameError作为例外。通常
l.append(num)
应该在
else
子句中,但是nbd@wjandrea六合一,其他六条……少了一行代码:)@AnasGhareib您使用的是哪一版本的Python?@AnasGhareib请确保您使用的是标记所指示的Python 3。
nums = []

while True:
    num = input('Enter a number or "done": ')  # num is a string at this point
    if num == 'done':
        break
    try:
        # try to convert num to integer...
        num = int(num)  # This can fail with ValueError, so is in try
        nums.append(num)   # This won't run if above raises exception
    except ValueError:
        print("Invalid input")

# No need to sort...
print("Maximum", max(nums)) 
print("Minimum", min(nums))
while True:
    num = input("Enter a number")
    if num == "done":
        break
    try:
        num = int(num)
    except ValueError:
        print("Invalid input")
        continue
    l.append(num)
l.sort()
largest = l[-1]
smallest = l[0]