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' 未定义
我预计:
- 除法没有错误,因为除法
5/3
有意义
- 未收到错误消息,指出名称
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
我有以下简单的代码,旨在重新定义变量 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' 未定义
我预计:
- 除法没有错误,因为除法
5/3
有意义 - 未收到错误消息,指出名称
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