Python 异常处理

try 块允许您测试代码块以查找错误。

except 块允许您处理错误。

finally 块允许您执行代码,无论 try 和 except 块的结果如何。


异常处理

当我们调用 Python 并发生错误或异常时,通常会停止并生成错误消息。

可以使用 try 语句处理这些异常:

try 块将生成异常,因为 x 未定义:

  1. try:
  2. print(x)
  3. except:
  4. print("An exception occurred")

由于 try 块引发错误,因此会执行 except 块。

如果没有 try 块,程序将崩溃并引发错误:

该语句将引发错误,因为未定义 x:

  1. print(x)

多个异常

您可以根据需要定义任意数量的 exception 块,例如,假如您要为特殊类型的错误执行特殊代码块:

如果 try 块引发 NameError,则打印一条消息,如果是其他错误则打印另一条消息:

  1. #The try block will generate a NameError, because x is not defined:
  2. try:
  3. print(x)
  4. except NameError:
  5. print("Variable x is not defined")
  6. except:
  7. print("Something else went wrong")

Else

如果没有引发错误,那么您可以使用 else 关键字来定义要执行的代码块:

在本例中,try 块不会生成任何错误:

  1. #The try block does not raise any errors, so the else block is executed:
  2. try:
  3. print("Hello")
  4. except:
  5. print("Something went wrong")
  6. else:
  7. print("Nothing went wrong")

Finally

如果指定了 finally 块,则无论 try 块是否引发错误,都会执行 finally 块。

  1. #The finally block gets executed no matter if the try block raises any errors or not:
  2. try:
  3. print(x)
  4. except:
  5. print("Something went wrong")
  6. finally:
  7. print("The 'try except' is finished")

这对于关闭对象并清理资源非常有用:

试图打开并写入不可写的文件:

  1. #The try block will raise an error when trying to write to a read-only file:
  2. try:
  3. f = open("demofile.txt")
  4. f.write("Lorum Ipsum")
  5. except:
  6. print("Something went wrong when writing to the file")
  7. finally:
  8. f.close()
  9. #The program can continue, without leaving the file object open

程序可以继续,而且不会打开文件对象。


引发异常

作为 Python 开发者,您可以选择在条件发生时抛出异常。

如需抛出(引发)异常,请使用 raise 关键词。

假如 x 小于 0,则引发异常并终止程序:

  1. x = -1
  2. if x < 0:
  3. raise Exception("Sorry, no numbers below zero")
  4. <code class="marked"></code>

raise 关键字用于引发异常。

您能够定义所引发异常的类型、以及打印给用户的文本。

如果 x 不是整数,则引发 TypeError:

  1. x = "hello"
  2. if not type(x) is int:
  3. raise TypeError("Only integers are allowed")