Python: 尝试在处理错误声明的 else 语句中打印先前定义的变量时出现 NameError

Python: NameError when trying to print a previously defined variable in an else statement of handling error delcaration

我有以下简单的代码,旨在重新定义变量 y,当它在数学上不可能成为 x 的除数时:

x = 5
y = 0

while True:
    try:
        z = x/y
    except:
        while True:
            try:
                print("error in the division. Please, redefine y")
                y = int(input("y = __"))
            except:
                print("Redefine y properly__")
                continue
            else:
                print("All done")
                print(z)
                break

当我被要求引入输入时,我引入了一个像 3 这样的整数,我得到以下输出和错误:

error in the division. Please, redefine y y = __3 All done --------------------------------------------------------------------------- ZeroDivisionError Traceback (most recent call last) in 5 try: ----> 6 z = x/y 7 except:

ZeroDivisionError: 除以零

在处理上述异常的过程中,又发生了异常:

NameError Traceback(最近调用 最后)在 15 其他: 16 print("全部完成") ---> 17 打印(z) 18 休息 19

NameError: 名称 'z' 未定义

我预计:

  1. 除法没有错误,因为除法5/3有意义
  2. 未收到错误消息,指出名称 z 未定义,因为它在代码的第 3 行中定义:z = x/y

有人能帮帮我吗?这是 Python 课程的作业,所以我是初学者。

编辑:除了下面提供的解决方案外,我还找到了适合我的特定代码的解决方案:

x = 5
y = 0

while True:
    try:
        z = x/y
        break
    except:
        while True:
            print("error in the division. Please, redefine y")
            try:
                y = int(input("y = __"))
                break
            except:
                print("Redefine y properly__")
                continue

print("All done")
print(z)

您试图在重复外循环之前打印 z,因此您没有使用更正后的 y 执行除法。将其从循环中取出,它应该在外循环之后,以便等待除法成功并等待用户输入有效的替换。

并在除法成功后使用break跳出主循环

x = 5
y = 0

while True:
    try:
        z = x/y
        break
    except:
        while True:
            try:
                print("error in the division. Please, redefine y")
                y = int(input("y = __"))
            except:
                print("Redefine y properly__")
                continue

print("All done")
print(z)
break

IMO 你的代码有点过于复杂了。我的理解是,您实际上希望程序在用户提供任何非零输入后结束。因此,您只需要一个 while True。另外,我不太明白为什么你甚至在用户提供任何输入之前就强制代码抛出 ZeroDivisionError 。您可以省略将 y 初始化为 0 的部分,让用户从一开始就提供命令行参数。


以下应该可以解决问题:

x = 5

while True:
    try:
        y = int(input("y = __"))
        z = x / y
    except ZeroDivisionError:
        print("error in the division. Please, redefine y")
        continue
    else:
        print("All done")
        print(z)
        break