当前位置:首页>python>Python零基础入门(五):异常处理

Python零基础入门(五):异常处理

  • 2026-06-29 23:15:41
Python零基础入门(五):异常处理

Python零基础入门(五):异常处理

前言

前四篇我们完成了环境搭建与数据类型、运算符与条件判断、面向对象编程基础和模块与包导入。你已经能让程序"算"、能"想"、能"组织"——但程序运行中总会遇到各种意外:文件不存在、网络连接失败、除以零、用户输入非法数据……

这些"意外"就是异常。如果不对异常进行处理,程序会直接崩溃并抛出错误信息。一个健壮的程序,必须能够优雅地应对各种异常情况,而不是一遇到错误就"罢工"。

本篇将系统讲解 Python 的异常处理机制,让你的程序更加稳定可靠。


一、什么是异常?

异常(Exception)  是程序运行过程中发生的错误事件。当 Python 遇到无法正常执行的情况时,会"抛出"一个异常对象。如果这个异常没有被捕获处理,程序就会终止并显示错误信息(称为"堆栈跟踪")。

1.1 异常示例

# 没有异常处理的代码def divide(a, b):    return a / bresult = divide(10, 0)  # ZeroDivisionError: division by zeroprint("这行永远不会执行")

程序在第 3 行就崩溃了,第 4 行根本不会执行。运行结果:

Traceback (most recent call last):  File "main.py", line 3, in <module>    result = divide(10, 0)ZeroDivisionError: division by zero

1.2 常见内置异常

Python 内置了丰富的异常类型,每种类型对应一种特定的错误情况:

异常类型
说明
触发场景
ValueError
值错误
int("abc")
TypeError
类型错误
"hello" + 5
KeyError
键不存在
dict["不存在的键"]
IndexError
索引越界
list[100]
FileNotFoundError
文件不存在
open("不存在.txt")
ZeroDivisionError
除以零
1/0
AttributeError
属性不存在
"hello".foo()
ImportError
导入失败
import 不存在的模块
NameError
变量未定义
print(未定义的变量)
RuntimeError
运行时错误
多种场景

二、try-except 基本语法

Python 使用 try-except 语句来捕获和处理异常:

try:    # 可能发生异常的代码    result = 10 / 0except ZeroDivisionError:    # 处理特定异常    print("错误:除数不能为零!")

2.1 捕获特定异常

try:    num = int(input("请输入数字:"))    result = 100 / numexcept ValueError:    print("输入的不是有效数字!")except ZeroDivisionError:    print("不能除以零!")

可以有多个 except 块,分别处理不同类型的异常。Python 会从上到下依次检查,匹配到第一个就执行,然后跳过剩余的 except 块。

2.2 捕获多个异常

如果多个异常的处理方式相同,可以合并写:

try:    # 可能发生多种异常的代码    value = int(input("输入数字:"))    result = 100 / valueexcept (ValueError, ZeroDivisionError) as e:    print(f"发生错误:{e}")

2.3 捕获异常对象

使用 as 关键字可以获取异常对象,获取详细的错误信息:

try:    with open("不存在的文件.txt", "r") as f:        content = f.read()except FileNotFoundError as e:    print(f"文件不存在:{e}")    # 输出:文件不存在:[Errno 2] No such file or directory: &#x27;不存在的文件.txt&#x27;

三、else 和 finally

除了 try 和 except,Python 还提供了 else 和 finally 子句:

try:    num = int(input("请输入数字:"))    result = 100 / numexcept ValueError:    print("输入无效")except ZeroDivisionError:    print("不能除以零")else:    # 没有发生异常时执行    print(f"结果是:{result}")finally:    # 无论是否发生异常都会执行(通常用于清理工作)    print("程序结束")

3.1 执行流程

  • • try 块:执行可能出错的代码
  • • except 块:发生异常时执行(可以有多个)
  • • else 块:没有异常时执行(可选)
  • • finally 块:无论如何都会执行(可选,常用于资源清理)

3.2 else 的使用场景

else 子句适用于"只有在没有异常时才执行"的代码,这样可以把可能抛出异常的代码限制在最小范围:

try:    f = open("data.txt", "r")except FileNotFoundError:    print("文件不存在")else:    # 只有文件成功打开后才读取    content = f.read()    f.close()    print(content)

3.3 finally 的使用场景

finally 子句无论如何都会执行,即使在 try 或 except 中有 return 语句。它常用于资源清理:

def read_file(filename):    f = None    try:        f = open(filename, "r")        return f.read()    except FileNotFoundError:        return "文件不存在"    finally:        # 无论成功还是失败,都确保文件被关闭        if f:            f.close()            print("文件已关闭")

四、万能异常捕获(谨慎使用)

使用 Exception 可以捕获几乎所有非系统退出异常:

try:    # 任意可能出错的代码    risky_operation()except Exception as e:    # 捕获所有非系统退出异常    print(f"发生了错误:{type(e).__name__}: {e}")

4.1 为什么不推荐滥用?

# 最糟糕的做法:静默吞掉异常try:    dangerous_operation()except:    pass  # 异常被忽略了,出了问题你根本不知道!

滥用 except Exception 的问题:

  1. 1. 隐藏真正的错误:你不知道程序哪里出了问题
  2. 2. 难以调试:程序"看起来正常",但结果可能是错的
  3. 3. 掩盖 bug:可能让程序在错误状态下继续运行

4.2 何时使用?

只在以下场景使用 except Exception

  • • 最外层错误处理:捕获所有未预料到的异常,记录日志后安全退出
  • • 日志记录:记录异常信息后重新抛出
  • • 某些必须完成的操作:如资源清理
import loggingdef safe_operation():    try:        # 复杂的业务逻辑        result = complex_calculation()        return result    except Exception as e:        # 记录日志        logging.error(f"操作失败:{e}", exc_info=True)        # 重新抛出,让调用者决定如何处理        raise

五、raise 主动抛出异常

除了被动捕获异常,你还可以使用 raise 关键字主动抛出异常:

5.1 基本用法

def set_age(age):    if age < 0 or age > 150:        raise ValueError(f"年龄必须在 0-150 之间,当前值:{age}")    return agetry:    set_age(200)except ValueError as e:    print(f"错误:{e}")    # 输出:错误:年龄必须在 0-150 之间,当前值:200

5.2 重新抛出异常

在捕获异常后,可以用 raise 重新抛出(不带参数):

try:    result = 10 / 0except ZeroDivisionError:    print("记录日志:除零错误")    raise  # 重新抛出,让上层处理

5.3 异常链(Exception Chaining)

在捕获一个异常后抛出另一个异常,可以用 raise ... from ... 保留原始异常信息:

def convert_to_int(value):    try:        return int(value)    except ValueError as e:        raise TypeError(f"无法转换为整数:{value}") from etry:    convert_to_int("abc")except TypeError as e:    print(f"错误:{e}")    print(f"原始异常:{e.__cause__}")

六、自定义异常

当内置异常不能准确描述错误时,可以创建自己的异常类:

6.1 基本定义

class InsufficientFundsError(Exception):    """余额不足异常"""    pass# 使用balance = 100amount = 150if amount > balance:    raise InsufficientFundsError(f"余额不足:需要 {amount},当前余额 {balance}")

6.2 带属性的自定义异常

class InsufficientFundsError(Exception):    """余额不足异常"""    def __init__(self, balance, amount):        self.balance = balance        self.amount = amount        self.deficit = amount - balance        super().__init__(f"余额不足:需要 {amount},当前余额 {balance},缺少 {self.deficit}")class BankAccount:    def __init__(self, balance=0):        self.balance = balance    def withdraw(self, amount):        if amount > self.balance:            raise InsufficientFundsError(self.balance, amount)        self.balance -= amount        return self.balance# 使用account = BankAccount(100)try:    account.withdraw(150)except InsufficientFundsError as e:    print(f"取款失败:{e}")    print(f"缺少金额:{e.deficit}")

6.3 自定义异常的最佳实践

  1. 1. 继承Exception(而不是 BaseException
  2. 2. 命名以Error结尾(如 ValidationErrorTimeoutError
  3. 3. 提供有意义的错误信息
  4. 4. 可以添加额外的属性保存上下文信息
  5. 5. 组织异常层次:定义一个基类,然后派生具体异常
# 异常层次示例class AppError(Exception):    """应用异常基类"""    passclass ValidationError(AppError):    """数据验证错误"""    passclass DatabaseError(AppError):    """数据库错误"""    passclass ConnectionError(DatabaseError):    """数据库连接错误"""    pass

七、异常处理最佳实践

7.1 EAFP 原则

Python 社区推崇 EAFP(Easier to Ask Forgiveness than Permission,请求原谅比请求许可更容易)风格:

# LBYL(Look Before You Leap)风格 —— 先检查再操作if key in dictionary:    value = dictionary[key]else:    value = default_value# EAFP 风格 —— 先操作,出错再处理(更 Pythonic)try:    value = dictionary[key]except KeyError:    value = default_value

EAFP 的优势:

  1. 1. 代码更简洁:减少条件判断
  2. 2. 避免竞态条件:在多线程环境中更安全
  3. 3. 符合 Python 风格:Python 内置的很多操作都遵循这个原则

7.2 具体异常优于宽泛异常

# 不好:捕获所有异常try:    result = int(user_input)except Exception:    print("出错了")# 好:捕获特定异常try:    result = int(user_input)except ValueError:    print("请输入有效的数字")

7.3 不要忽略异常

# 最糟糕的做法try:    dangerous_operation()except:    pass# 至少记录一下import loggingtry:    dangerous_operation()except Exception as e:    logging.error(f"操作失败:{e}")

7.4 合理使用 finally

# finally 用于资源清理file = Nonetry:    file = open("data.txt", "r")    content = file.read()    process(content)except FileNotFoundError:    print("文件不存在")finally:    if file:        file.close()# 更好的方式:使用 with 语句(下一篇会详细讲)with open("data.txt", "r") as file:    content = file.read()

7.5 保持异常粒度适中

# 不好:一个 try 包含太多代码try:    data = read_file(filename)    parsed = parse_data(data)    result = process(parsed)    save_result(result)except Exception:    print("出错了")  # 哪一步出错?不知道!# 好:每个可能出错的操作单独处理try:    data = read_file(filename)except FileNotFoundError:    print("文件不存在")    returntry:    parsed = parse_data(data)except ParseError:    print("数据格式错误")    return# ... 以此类推

八、综合实战:健壮的用户输入处理

让我们结合所学知识,实现一个健壮的用户输入处理函数:

class InputError(Exception):    """输入错误基类"""    passclass OutOfRangeError(InputError):    """数值超出范围"""    def __init__(self, value, min_val, max_val):        self.value = value        self.min_val = min_val        self.max_val = max_val        super().__init__(f"数值 {value} 超出范围 [{min_val}, {max_val}]")class InvalidFormatError(InputError):    """格式无效"""    passdef get_integer(prompt, min_val=None, max_val=None):    """    获取用户输入的整数,带验证    Args:        prompt: 提示信息        min_val: 最小值(可选)        max_val: 最大值(可选)    Returns:        int: 验证通过的整数    Raises:        InvalidFormatError: 输入不是有效整数        OutOfRangeError: 数值超出范围    """    while True:        try:            user_input = input(prompt).strip()            if not user_input:                raise InvalidFormatError("输入不能为空")            value = int(user_input)            if min_val is not None and value < min_val:                raise OutOfRangeError(value, min_val, max_val or float(&#x27;inf&#x27;))            if max_val is not None and value > max_val:                raise OutOfRangeError(value, min_val or float(&#x27;-inf&#x27;), max_val)            return value        except ValueError:            print("错误:请输入有效的整数")        except InvalidFormatError as e:            print(f"错误:{e}")        except OutOfRangeError as e:            print(f"错误:{e}")        except KeyboardInterrupt:            print("\n用户取消输入")            raise SystemExitdef get_choice(prompt, options):    """    获取用户选择    Args:        prompt: 提示信息        options: 有效选项列表    Returns:        str: 用户选择的选项    """    while True:        try:            choice = input(prompt).strip().lower()            if choice not in options:                raise InvalidFormatError(f"无效选择,请输入:{&#x27;, &#x27;.join(options)}")            return choice        except InvalidFormatError as e:            print(f"错误:{e}")# 使用示例if __name__ == "__main__":    print("=== 用户信息录入 ===")    # 获取年龄(1-150)    age = get_integer("请输入年龄:", min_val=1, max_val=150)    print(f"年龄:{age}")    # 获取分数(0-100)    score = get_integer("请输入分数:", min_val=0, max_val=100)    print(f"分数:{score}")    # 获取选择    action = get_choice("请选择操作 (y/n): ", ["y", "n", "yes", "no"])    print(f"选择:{action}")    print("录入完成!")

这个例子展示了:

  1. 1. 自定义异常类:继承体系,携带额外信息
  2. 2. 异常链:保留原始错误信息
  3. 3. 循环重试:捕获异常后让用户重新输入
  4. 4. 多种异常处理:分别处理不同类型的错误
  5. 5. 键盘中断处理:优雅地处理 Ctrl+C

九、动手练习

  1. 1. 写一个函数 safe_divide(a, b),当除数为 0 时返回 None 而不是抛出异常。
  2. 2. 创建一个自定义异常 InvalidEmailError,当邮箱格式不正确时抛出(只需检查是否包含 @ 和 .)。
  3. 3. 写一个文件读取函数,处理文件不存在、权限不足、编码错误等异常,返回友好的错误信息。
  4. 4. 实现一个简单的计算器,处理除零错误、无效输入、不支持的运算符等异常。
  5. 5. 创建一个"重试装饰器",当函数抛出异常时自动重试指定次数。

十、小结

本篇我们系统学习了 Python 的异常处理机制:

核心语法

  • • try-except:捕获并处理异常
  • • else:没有异常时执行
  • • finally:无论如何都执行(资源清理)
  • • raise:主动抛出异常

自定义异常

  • • 继承 Exception 类
  • • 命名以 Error 结尾
  • • 提供有意义的错误信息和上下文

最佳实践

  • • EAFP 原则:先做再处理,而不是先检查再做
  • • 具体异常优于宽泛异常:不要滥用 except Exception
  • • 不要忽略异常:至少记录日志
  • • 保持异常粒度适中:一个 try 块不要太长

异常处理是编写健壮程序的关键技能。掌握了它,你的程序就能优雅地应对各种意外情况,而不是一遇到错误就崩溃。

下一篇,我们将学习文件操作——让你的程序能读写数据、处理配置文件、生成报告。不见不散!


本文首发于微信公众号「羽您码上聊」,欢迎关注获取更多技术内容。

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-07-03 02:20:03 HTTP/2.0 GET : https://f.mffb.com.cn/a/500994.html
  2. 运行时间 : 0.275093s [ 吞吐率:3.64req/s ] 内存消耗:4,758.09kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=f37448ee37a4fb854557034c5eee2429
  1. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/runtime/temp/067d451b9a0c665040f3f1bdd3293d68.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000521s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000792s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000319s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000323s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000537s ]
  6. SELECT * FROM `set` [ RunTime:0.000238s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000597s ]
  8. SELECT * FROM `article` WHERE `id` = 500994 LIMIT 1 [ RunTime:0.016082s ]
  9. UPDATE `article` SET `lasttime` = 1783016403 WHERE `id` = 500994 [ RunTime:0.005107s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.000280s ]
  11. SELECT * FROM `article` WHERE `id` < 500994 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.012066s ]
  12. SELECT * FROM `article` WHERE `id` > 500994 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.009658s ]
  13. SELECT * FROM `article` WHERE `id` < 500994 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.001144s ]
  14. SELECT * FROM `article` WHERE `id` < 500994 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.076985s ]
  15. SELECT * FROM `article` WHERE `id` < 500994 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.033893s ]
0.276750s