python---异常

1. 什么是异常?

异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。
一般情况下,在Python无法正常处理程序时就会发生一个异常。
异常是Python对象,表示一个错误。
当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行

2.异常处理

try ...except语句

 

try:
    age = int(input('请输入年龄:'))
    if age >= 18:
        print('你已成年')
    else:
        print('你未成年')
except ValueError as e:
    print('输入不合法')
    print(e)
print('程序结束')

"""
输入不合法
invalid literal for int() with base 10: 'a'
程序结束
"""

try...except...else

 

 

try:
    age = int(input('请输入年龄:'))
except ValueError as e:
    print('输入不合法')
    print(e)
else:
    if age >= 18:
        print('你已成年')
    else:
        print('你未成年')

print('程序结束')

"""
输入不合法
invalid literal for int() with base 10: 'a'
程序结束
"""

try...except...finally

无论是try代码块正常结束还是except代码块异常结束,都会执行finally代码块

 

 

try:
    f = open('text.txt', 'w')
    s = 'hell0'
    f.write(s)
except:
    print('操作异常')
finally:
    f.close()
    print('关闭文件')

"""
运行结果:
操作异常
关闭文件
"""

处理多个异常

num = input('请输入数字:')
try:
    y = 100 / int(num)
except (ValueError, ZeroDivisionError) as e:
    print(f'异常发生{e}')

raise抛出异常

可以使用raise语句自己触发异常,raise语法格式如下:

raise [Exception [, args [, traceback]]]

语句中Exception是异常的类型(例如ValueError),参数是一个异常参数值。该参数是可选的,如果不提供,异常的参数是"None"。最后一个参数是跟踪异常对象,也是可选的(在实践中很少使用)。

例如:

def not_zero(num):
    try:
        if num == 0:
            raise ValueError('参数错误')
        return num
    except Exception as e:
        print(e)
 
 
not_zero(0)

 

class ValidateError(ValueError):
    def __init__(self, messgae, *args, **kwargs):
        super().__init__(messgae, *args, **kwargs)


def validate_account(username, password):
    if username == '':
        raise ValidateError('用户名不能为空')
    if password == '':
        raise ValidateError('密码不能为空')
    if username != 'Elsa' and password != '666666':
        raise ValueError('用户名密码不匹配')
username = input('请输入用户名:')
password = input('请输入密码')

try:
    validate_account(username, password)
except(ValidateError, ValueError) as e:
    print(e)
else:
    print('用户名密码正确')

 

posted @ 2022-01-20 10:31  ElsaWang  阅读(61)  评论(0)    收藏  举报