【问题标题】:How to exit from try block and show exception message?如何退出 try 块并显示异常消息?
【发布时间】:2016-05-08 04:16:27
【问题描述】:

此 Python 代码块在 student [3] 处生成错误。如何在except 中立即显示错误信息而不是打印之前的值?

try:

    student = ['bob','rob','mob']
    print (student )
    print (student [0])
    print (student [1])
    print (student [2])
    print (student [3])

except:
    print("error")

电流输出:

['bob','rob','mob']
bob
rob
mob
error

Process finished with exit code 0

如何避免在出现错误之前打印?

【问题讨论】:

  • 请不要添加无关标签
  • @TimCastelijns kk ..使用那个 ide :)
  • 你想展示的实际信息是什么?
  • @thefourtheye ,python 中的新功能,实际上我需要像在.net 中一样在尝试中出现错误时立即从尝试中跳出来 .. 并在 catch 或 except 部分显示消息
  • @utility 这正是 Python 所做的。它打印mob,因为它可以在遇到student [2] 时执行。

标签: python exception exception-handling try-catch indexoutofboundsexception


【解决方案1】:

你不能那样做 AFAIK。

Python 不知道它将遇到IndexOutOfBounds (IndexError) 异常,因此它会一直执行直到遇到异常。

补救这种情况的一种方法是使用for 循环并仅对其进行迭代。它应该完全避免异常:

try:
    student = ['bob','rob','mob']
    for stud in student:
        print stud

except:
    print("error") # less likely to be reached :)

【讨论】:

  • oh..通常在.net中我曾经看到代码直接跳转到catch块
  • 就像我说的,这是据我所知。但也许再等一会儿,更聪明的人就会有解决方案:)
  • 还有其他办法吗?
  • (据我所知)- 不。如果遇到错误,将无法跳过打印。唯一更好的方法是在之前迭代之前检查您是否拥有正确数量的项目。
【解决方案2】:

代码将一直运行,直到发生一些错误,并且在print (student [3]) 之前不会发生错误。因此,以前的命令将运行,现在可以返回。 一个简单的解决方案是,您首先将这些值分配给一些变量,然后将它们打印出来:

try:

    student = ['bob','rob','mob']
    a=student [0]
    b=student [1]
    c=student [2]
    d=student [3]
    print (a)
    print (b)
    print (c)
    print (d)

except:
    print("error")

所以在执行打印命令之前,d=student [3] 发生了错误。

【讨论】:

  • 它基于代码逐行运行的基本概念。
  • 谢谢@Ali,但如果我的代码错了,请纠正我,我也知道一行一行的打印......如何逐行分配使它不同?
  • 是一样的。但在您的代码中,您首先打印。你先分配。这意味着它会在任何打印发生之前在 d=student[3] 处引发异常
  • 您直接打印了这些值。您的代码成功打印了三个值,并且在运行 print(student [3]) 时引发了异常并打印了错误消息。
  • 当然可以。 @AliFatolahzadeh 的回答做得很好;)+1
猜你喜欢
  • 2017-10-19
  • 2011-09-01
  • 2013-09-20
  • 1970-01-01
  • 2020-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-14
相关资源
最近更新 更多