当前位置: 首页 > 面试题库 >

无法在Python中捕获ValueError

陈龙野
2023-03-14
问题内容

我开始学习Python,并且编写了一个非常简单的代码来练习try / except。

这是代码:

a = float(input('num1: '))
b = float(input('num2: '))

try:
      result = a / b
except ValueError as e:
      print ('error type: ', type (e))

print(result)

每当我输入字母作为数字时,除了的打印效果良好,但代码崩溃。

ZeroDivisionErrorTypeError正在工作,但ValueError没有。

我什至将输入放在单独的try / except中,但仍然无法正常工作。

我该如何在实际应用中处理此错误?


问题答案:

在您进入try块之前发生崩溃。如果您输入带有当前代码的字母,它不会在except块中打印错误。

只需将输入部分放在单独的try块中将无法捕获它-您需要与try相关的except块,其中发生错误,例如

try:
    a = float(input('num1: '))
    b = float(input('num2: '))
except ValueError as e:
    print ('Value Error')

try:
    result = a / b
except ZeroDivisionError as e:
    print ('Zero DivisionError')

print(result)

或者,您可以将所有输入和除法都放在try块中,并捕获当前的报告:

try:
    a = float(input('num1: '))
    b = float(input('num2: '))
    result = a / b
except ValueError as e:
    print ('error type: ', type (e))

print(result)

编辑:请注意,如果在这些任何一个中确实发生任何错误,则稍后将导致进一步的错误。最好选择第二个选项,但是将print(结果)移到try块中。这是唯一要定义的时间。



 类似资料:
  • 问题内容: 我正在尝试捕获“ android.database.sqlite.SQLiteException:错误代码5:数据库已锁定”异常,并带有: 由于某些原因,我仍然会收到错误消息,并且LogCat中没有显示“ caught”。我尝试捕获一般的“异常”,但这仍然行不通。怎么了? 更新, 我发现了这个问题,这确实很奇怪:由于某种原因,将goto10声明的db.insert()更改为db.ins

  • 问题内容: 尽管我在日志中看到了异常,但似乎无法捕获到约束违例异常。 实体 我正试图抓住它 -它永远不会到达捕获块。 当我使用 捕获(异常e) 我捕获到“ javax.transaction.RollbackException:ARJUNA016053:无法提交事务。” 这是错误日志: 我究竟做错了什么 ? 更新>> 我当前的代码是: 日志是 环境:PostgreSQL 9.2 JBoss AS

  • 我使用的是Spring Boot 2和Spring Boot starter数据jpa以及底层的MariaDB。 我有一个带有唯一键“用户名”的表。如果违反了此约束,我想捕获,但似乎Spring正在记录并且不会在记录后重新抛出(我最好的猜测)。被抛出。 我想在中捕获。 以下是几段代码片段: 堆栈跟踪:

  • 问题内容: 我的IDE给我该行的错误 我试着抓住,但是并没有使错误消失。有什么想法吗? 问题答案: 扩展了,所以您的IDE本身就有了更深的麻烦-也许库导入被搞砸了?

  • 我正在尝试捕获SocketTimeoutException,以便我的套接字保持活动状态,并且可以继续读取程序。不幸的是,无论我如何尝试捕获读取超时,我都无法捕获,因此应用程序关闭。

  • 我有一个实体类Person,它通过JoinColumn连接到另一个实体Address,并且与Person有一个关系,Address实体在字段Country上有一个@NotNull注释。 简化代码如下: 我还有一个服务方法,即updateAddress,该方法最简单的形式如下: 我编写了一个小的单元测试,其中我试图使用updateAddress方法为一个没有预定义地址的人更新地址。 即 Transa