MST

星途 面试题库

面试题:Python异常处理else代码块在复杂业务逻辑中的优化

假设你正在开发一个金融交易系统,其中涉及多个步骤的操作,如验证用户身份、检查账户余额、执行交易等。在异常处理方面,使用try - except - else结构如何优化该业务逻辑的代码结构和错误处理流程?请详细阐述思路,并给出关键部分的代码示例。
31.5万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试

思路阐述

  1. try块:将可能引发异常的代码,即验证用户身份、检查账户余额、执行交易等操作放在try块中。这样当其中任何一步出现异常时,程序不会直接崩溃,而是跳转到except块进行处理。
  2. except块:根据不同类型的异常进行针对性处理。例如,用户身份验证失败可能抛出AuthenticationError,账户余额不足可能抛出InsufficientFundsError等。在except块中记录错误日志,向用户返回友好的错误提示等。
  3. else块:当try块中没有任何异常发生时,else块中的代码会被执行。这可以用于执行交易成功后的一些操作,比如记录交易日志等,使成功流程和异常处理流程清晰分开,优化代码结构。

关键部分代码示例

class AuthenticationError(Exception):
    pass

class InsufficientFundsError(Exception):
    pass

def authenticate_user(user_id, password):
    # 模拟验证用户身份
    if user_id!= "valid_id" or password!= "valid_password":
        raise AuthenticationError("用户身份验证失败")
    return True

def check_account_balance(account_id):
    # 模拟检查账户余额,假设账户余额为100
    balance = 100
    if balance < 50:  # 假设交易金额为50
        raise InsufficientFundsError("账户余额不足")
    return balance

def execute_transaction(account_id, amount):
    # 模拟执行交易
    print(f"执行交易,从账户 {account_id} 扣除金额 {amount}")

try:
    user_id = "valid_id"
    password = "valid_password"
    account_id = "12345"
    amount = 50

    authenticate_user(user_id, password)
    balance = check_account_balance(account_id)
    execute_transaction(account_id, amount)
except AuthenticationError as e:
    print(f"错误: {e}")
except InsufficientFundsError as e:
    print(f"错误: {e}")
else:
    print("交易成功,记录交易日志等操作")