python中的异常处理

本文所记述的是一些基础知识点中平时用的比较少的方法。

一、主动引发异常

使用raise语句主动引发异常,例如:

raise Exception

一些常用的异常类:

  • Exception 几乎所有的异常类都是从它派生而来的
  • AttributeError 引用属性或给它赋值失败时引发
  • OSError 操作系统不能执行指定的任务(如打开文件)时引发,有多个子类
  • IndexError 使用序列中不存在的索引时引发,为LookupError的子类
  • KeyError 使用映射中不存在的键时引发,为LookupError的子类
  • NameError 找不到名称(变量)时引发
  • SyntaxError 代码不正确时引发
  • TypeError 将内置操作或函数用于类型不正确的对象时引发
  • ValueError 将内置操作或函数用于这样的对象时引发:其类型正确但包含的值不合适
  • ZeroDivisionError 在除法或求模运算的第二个参数为零时引发

二、raise...from...

在执行下列语句是会引发两个异常。

try: 
     1/0 
except ZeroDivisionError: 
     raise ValueError

一个是由ZeroDivisionError引发的:

Traceback (most recent call last): 
  File "", line 2, in  
ZeroDivisionError: division by zero

另一个是由ValueError引发的:

Traceback (most recent call last): 
  File "", line 4, in  
ValueError

使用raise ... from ...语句可以提供自己的异常上下文,使用None将禁用except捕获的异常的上下文。

例如以下代码:

try: 
     1/0 
except ZeroDivisionError: 
     raise ValueError from None 
# 输出:
Traceback (most recent call last): 
  File "", line 4, in  
ValueError

三、捕获多个异常

1.使用多个except语句

try:  
   x = int(input('Enter the first number: ')) 
   y = int(input('Enter the second number: ')) 
   print(x / y) 
except ZeroDivisionError: 
   print("The second number can't be zero!") 
except TypeError: 
   print("That wasn't a number, was it?")

2.使用一条语句捕获多个异常

注意:这种方法except语句后面的各类异常必须加括号。

try:  
   x = int(input('Enter the first number: ')) 
   y = int(input('Enter the second number: ')) 
   print(x / y) 
except (ZeroDivisionError, TypeError, NameError): 
   print('Your numbers were bogus ...') 

四、获取异常信息:as e

try:  
   x = int(input('Enter the first number: ')) 
   y = int(input('Enter the second number: ')) 
   print(x / y) 
except (ZeroDivisionError, TypeError) as e: 
   print(e)

当然,也可以使用Exception方法捕获所以的异常信息,例如:

try:  
   x = int(input('Enter the first number: ')) 
   y = int(input('Enter the second number: ')) 
   print(x / y) 
except Exception as e: 
   print(e) 

五、else和finally

else和finally都是紧接try...except...语句的,不同的是,else只有在异常没有被引发时才会执行,而finally无论异常是否引发,都会被执行。

你可能感兴趣的:(python中的异常处理)