如何解决Python:尝试在处理错误声明的 else 语句中打印先前定义的变量时出现 NameError
我有以下简单代码,旨在重新定义变量 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
这样的整数时,我得到以下输出和错误:
划分错误。请重新定义 y y = __3 全部完成 -------------------------------------------------- ------------------------- ZeroDivisionError 回溯(最近一次调用 最后)在 5 尝试: ----> 6 z = x/y 7 除外:
ZeroDivisionError: 除以零
在处理上述异常的过程中,又发生了一个异常:
NameError Traceback(最近调用 最后)在 15 其他: 16 打印(“全部完成”) ---> 17 打印(z) 18 休息 19
NameError: name 'z' 未定义
我期望:
有人可以帮我吗?这是 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)
解决方法
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
,
您试图在重复外循环之前打印 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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。