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('用户名密码正确')