IT@程序员猿媛程序员

python异常处理

2019-06-01  本文已影响3人  凌航

# try:
#     可能发生异常的代码
# except:
#     异常处理代码
# except:处理所有异常
# except Type:处理指定类型的异常
# except type as data:获取异常信息
# except (Type1, Type2, Type3): 同时处理这三种异常,如果想获取异常数据,同样可以使用as语句,
# 也可以处理多个,继续添加类型即可

有如下实例:

student = {'name':'zs'}
try:
    opt = int(input('请输入一个整数:'))
    student['age']
except (KeyError, ValueError) as d:
    print('ssds')

else:
    print('没有发生异常')

print('Hello')

请输入一个整数:d
ssds
Hello

# 从最特殊到最一般处理,一旦处理了其中一个异常,后面的异常不会再处理
# try:
#     pass
# except 异常类型1:
#     pass
# except 异常类型2:
#     pass
# except (异常类型3, 异常类型4, 异常类型5):
#     pass
# except Exception as e:
#     print(e)
# 定义这种方式捕捉异常时,一定要先写具体的异常,再写具有普遍性的异常。所有的异常,继承自Exception

# try:
# except:
#     发生异常执行
# else:
#     没有发生异常时执行
# finally:
#     有没有异常都会执行
# 可以只有try...finally语句
# finally 一般用来释放资源

随便举个例子:

try:
    print('zs')
finally:
    print("finally")

try:
    num = int(input('请输入整数:'))
    result = 8 / num
    print(result)
except ValueError:
    print("请输入一个整数")
except ZeroDivisionError:
    print('除数不能为0')
except Exception as e:
    print('未知错误%s'%e)
else:
    print('正常执行')
finally:
    print('执行完毕。。。不保证正确')

zs
finally
请输入整数:d
请输入一个整数
执行完毕。。。不保证正确

def fun1():
    a = 0
    print(10 / a)

def fun2():
    # fun1()
    try:
        fun1()
    except ZeroDivisionError:
        print('除数为0')
fun2()

除数为0

这里异常是发生在fun1()函数里,而对于异常的处理却是在fun2()函数里

def fun3():
    print("Hello")
    raise ZeroDivisionError()
fun3()

Traceback (most recent call last):
File "D:/Pycharm/day03/venv/Include/test.py", line 4, in <module>
fun3()
File "D:/Pycharm/day03/venv/Include/test.py", line 3, in fun3
raise ZeroDivisionError()
ZeroDivisionError

class ParamInvalidException(Exception):
    pass

def login(username, pwd):
    if len(username) < 6:
        raise ParamInvalidException("用户名长度在1-6位之间")
    if username != 'zhangsan':
        raise ParamInvalidException('用户名错误')

    print('登录成功')

try:
    login('leiguang', '12345')
    print('后继操作')
except ParamInvalidException as e:
    print(e)

用户名错误

我们可以发现,自定义异常通常是配合raise使用的,而抛出的异常就是raise语句后面括号里的参数

# try:
#     pass
# except Exception:
#     # 先记录异常
#     # 能处理就处理
#     # 不能处理:raise
上一篇 下一篇

猜你喜欢

热点阅读