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

如何解决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' 未定义

我期望:

  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)

解决方法

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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?