Python 异常处理

Python- 异常处理:

  • 异常处理的语法:
  try:
  	... # 可能会出现的异常
  except:
  	... # 如果出现异常时执行的代码
  else:
  	... # 没有异常时执行的代码
  finally:
  	... # 如论是否抛出异常都会执行的代码
  • 无论什么异常,都做统一处理:
  try:
  	a = 1
  	b = 0
  	c = a/b
  except Exception: #(Python3中,Exception类名 可以省略,python2中未知)
  	print("出现异常")
  else:
  	print("没有异常")
  finally:
  	print("有没有异常,都会执行")
  • 针对不同异常做出处理:
  try:
    a = 1
    b = 2
    c = a/b
except ZeroDivisionError:
    print("除零错误")
except TypeError:
    print("数据类型错误")
except:
    print("未知错误")
else:
    print(c)
finally:
    print("无论出错与否都会执行")
  • 主动抛出异常的例子:
def ArgumentError(name,age):
    if type(name) != str:
        raise ValueError("姓名必须为字符类型")
    elif type(age) != int:
        raise ValueError("年龄必须为整数")
    else:
        return name, age

a = input("请输入姓名")
b = input("请输入年龄")
try:
    x = greet(a,b)
except ValueError as error:
    print(error.args)
else:
    print(x)
finally:
    print("输入完成")
  • 异常管理
class ArgumentError(Exception):
    def __init__(self, *args, **kwargs):
        tmp_args = args + ("参数类型错误",)
        super().__init__(*tmp_args, **kwargs)

def greet(name, age):
    if isinstance(name, str) == False:
        raise ArgumentError("name must be a string type")
    if isinstance(age, int) == False:
        raise ArgumentError("age must be a int type")
    print("my name is {},my age is {}".format(name, age))

name = 1
age = 12
try:
    greet(name, age)
except Exception as err:
    print(err.args)

finally:
    print("介绍完毕")
  • 常见的异常类型:
异常名称说明
AttributeError属性错误,访问一个对象的不存在的属性的时候,抛出这个异常
ImportError导入包错误
IndexError下标错误,一般有列表越界等
KeyErrorkey错误,一般访问字典的key不存在的时候
NameError变量名不存在
NotImplementedError某个方法没有实现的错误
StopIteration迭代器已经到最后了
IndentationError缩进错误
TabError包含了tab和空格错误
TypeError类型错误,有时候传递了一个错误类型的值给其他函数
UnicodeEncodeErrorUnicode编码错误,一般是unicode->str错误
UnicodeDecodeErrorUnicode解码错误,一般是str->unicode错误
ValueError值错误,比如传一个12a给int()函数转换
ZeroDivisionError除0错误
IOError打开一个不存在的文件(在Python3中使用FileNotFoundError)
FileNotFoundError文件没有找到的错误
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值