当前位置:首页>python>python中的上下文原理

python中的上下文原理

  • 2026-08-18 23:11:36
python中的上下文原理

with 语句

在我们日常使用场景中,经常会操作一些资源,比如文件对象、数据库连接、Socket 连接等。资源操作完了之后,不管操作的成功与否,最重要的事情就是关闭该资源,否则资源打开太多而没有关闭,程序会报错。以文件操作为例,通常我们会这样写:

f = open('file.txt''w', encoding='utf-8')
try:
    f.write("Hello")
finally:
    f.close()

但既然 close 方法是必须的操作,那就没必要显式地调用,所以 Python 给我们提供了一种更优雅的方式,使用 with 语句:

withopen('file.txt''w', encoding='utf-8'as f:
    f.write("Hello")

在退出 with 语句下的代码块之后,f 对象会自动执行自己的 close 方法,实现资源的释放,简洁优雅。

这里比原文多写了一个 encoding='utf-8'。文本模式下不传 encoding 会使用与平台相关的默认编码(Windows 上往往不是 UTF-8),Python 3.10 起加入了 EncodingWarning 来提示这件事,用 python -X warn_default_encoding 运行就能看到警告。写新代码时显式指定编码是更稳妥的习惯。

上下文管理器原理

上下文管理器实际是内部实现了 __enter__ 和 __exit__ 方法的对象。

当我们使用 with 语法时:

__enter__() 方法:返回一个值,可以将它赋值给 as 后面的对象,例如上面的 f

__exit__() 方法:with 语句退出或者发生异常时会执行这个方法。

1、__enter__ 方法说明

上下文管理器的 __enter__ 方法是可以带返回值的,默认返回 None,这个返回值通过 with ... as ... 中的 as 赋给它后面的那个变量,所以 with EXPR as VAR 就是将 EXPR 对象 __enter__ 方法的返回值赋给 VAR。

当然 with...as... 并非固定组合,单独使用 with... 也是可以的,上下文管理器的 __enter__ 方法还是正常执行,只是这个返回值并没有赋给一个变量,with 下面的代码块也不能使用这个返回值。

如果对象没有实现这两个方法就拿去 with,3.11 之后的报错信息比过去清楚很多,会直接告诉你缺了哪个方法:

classOnlyEnter:
def__enter__(self):
returnself


with OnlyEnter():
pass
# TypeError: 'OnlyEnter' object does not support the context manager protocol (missed __exit__ method)

2、__exit__ 方法说明

上下文管理器的 __exit__ 方法接收 3 个参数 exc_typeexc_valexc_tb,如果代码块 BLOCK 发生了异常 e 并退出,这 3 个参数分别为 type(e)e 本身(异常实例)、e.__traceback__,否则都为 None。

原文这里说第二个参数是 str(e),这个说法是错的。实际传入的是异常实例,不是字符串,实测可以验证:

classTrack:
def__enter__(self):
returnself

def__exit__(self, exc_type, exc_val, exc_tb):
print(exc_type, repr(exc_val), type(exc_val), exc_tb isnotNone)
returnFalse


with Track():
raise ValueError("boom")

# <class 'ValueError'> ValueError('boom') <class 'ValueError'> True
# 之后异常继续向外抛出

这个区别在实际写代码时很关键,因为你可以直接对 exc_val 做 isinstance 判断、读它的属性、或者重新 raise,如果它只是个字符串这些都做不到。

同样 __exit__ 方法也是可以带返回值的,这个返回值应该是一个布尔类型 True 或 False,默认为 None(即 False)。如果为 False,异常会被抛出,用户需要进行异常处理。如果为 True,则表示忽略该异常。

classSwallow:
def__enter__(self):
returnself

def__exit__(self, exc_type, exc_val, exc_tb):
print("swallow", exc_type)
returnTrue


with Swallow():
raise KeyError("k")
print("after swallow")

# swallow <class 'KeyError'>
# after swallow

一个上下文管理器一般使用如下:

with EXPR as VAR:
    BLOCK

上述代码的执行过程等价于:

import sys

manager = EXPR
enter = type(manager).__enter__
exit = type(manager).__exit__
value = enter(manager)
hit_except = False
try:
    VAR = value
    BLOCK
except BaseException:
    hit_except = True
ifnot exit(manager, *sys.exc_info()):
raise
finally:
ifnot hit_except:
        exit(manager, NoneNoneNone)

原文给的等价代码是 try/finally 加一个无参的 ContextManager.__exit__(),这只是个便于理解的粗略示意,实际上有三处不成立,写自定义管理器时会踩到:

  • __exit__ 必须收到 3 个参数。文件对象的 __exit__ 签名是 (*args),所以 f.__exit__() 空参调用碰巧能跑;但自己定义的 def __exit__(self, exc_type, exc_val, exc_tb) 空参调用会直接 TypeError

  • 无参调用等于永远告诉管理器「没有异常」,__exit__ 就丧失了处理异常和吞掉异常的能力,返回 True 也起不了作用。

  • 特殊方法是从类型上查找的(type(manager).__enter__),不是从实例的 __dict__,所以给实例挂一个 __enter__ 属性对 with 无效。

f 对象就是把自己的 close 方法定义在了它的 __exit__ 方法内部,实现了代码块 BLOCK 执行完之后自动关闭自身。

自定义上下文管理器

下面我们定义一个文件类,内部实现了 __enter__ 和 __exit__ 两个方法:

classFile:
def__init__(self, filename, mode, encoding='utf-8'):
self.filename = filename
self.mode = mode
self.encoding = encoding
self.f = None

def__enter__(self):
print("进入")
self.f = open(self.filename, self.mode, encoding=self.encoding)
returnself.f

def__exit__(self, exc_type, exc_val, exc_tb):
print("退出")
self.f.close()
returnFalse

这时候 File 类就是一个上下文管理器。

原文把 __exit__ 写成 def __exit__(self, exc_type=None, exc_val=None, exc_tbs=None),给三个参数都加了默认值,目的是让后面 __exit__() 的空参调用不报错。真实的协议调用总会传满 3 个参数,所以默认值没有必要,反而掩盖了「无参调用是错的」这个事实,这里改回标准签名。另外 return False 显式写出来,表示不吞异常(不写也一样,None 即假值)。

我们分别通过 with 语句和 try/finally 语句使用 File 类对文件进行写入操作。

通过 with 语句执行:

with File('file.txt''w'as f:
print("正在写入...")
    f.write('Hello')

控制台输出:

进入
正在写入...
退出

并得到了一个写了 Hello 的 file.txt 文件。

通过 try/finally 语句执行:

manager = File('file.txt''w')
var = manager.__enter__()
try:
print("正在写入...")
    var.write('Hello')
finally:
    manager.__exit__(NoneNoneNone)

控制台输出:

进入
正在写入...
退出

并得到了一个写了 Hello 的 file.txt 文件。

两者输出一致,所以验证了上一节中执行过程的等价关系是正确的。注意这里的 __exit__ 必须补上三个 None,这也是上一节说的那处改动。

如果希望自定义的管理器带上一点标准行为,可以继承 contextlib.AbstractContextManager,它提供了默认的 __enter__(返回 self)和 __exit__(返回 None),只需要覆盖需要的那一个:

from contextlib import AbstractContextManager


classTimer(AbstractContextManager):
def__exit__(self, exc_type, exc_val, exc_tb):
print("退出")
returnFalse


with Timer() as t:
print("t 就是实例本身:", t)

contextmanager 装饰器

Python 还提供了一个 contextmanager 装饰器,允许用户将一个生成器定义为上下文管理器。该装饰器将生成器中的代码通过 yield 语句分成两部分,yield 之前的代码为 __enter__ 方法,yield 之后的代码为 __exit__ 方法,yield 的返回值即 __enter__ 方法的返回值,用于赋给 as 后的变量。

下面我们通过 contextmanager 装饰器也实现一个关于文件的上下文管理器:

from contextlib import contextmanager


@contextmanager
defopen_file(filename, mode, encoding='utf-8'):
print('进入')
    f = open(filename, mode, encoding=encoding)
try:
yield f
finally:
print('退出')
        f.close()

说明:这里使用 try/finally 是确保 yield 的过程中就算出现异常,文件也能正常关闭。当然这里也能处理异常,使用 try/except/finally 即可。

通过 with 语句执行:

with open_file('file.txt''w'as f:
print("正在写入...")
    f.write('Hello')

执行结果跟之前的上下文管理器执行结果一致,说明 contextmanager 装饰器也能定义一个上下文管理器。

有两个细节值得补充。一是生成器版本的管理器是一次性的,调用一次函数得到的对象只能进一个 with;想复用必须每次重新调用函数:

cm = open_file('file.txt''w')
with cm:
pass
with cm:      # 再次进入会报错
pass
# AttributeError: '_GeneratorContextManager' object has no attribute 'args'

二是生成器的形状必须正好 yield 一次,否则 with 会抛 RuntimeError,报错信息很直白:一次都不 yield 是 generator didn't yield,yield 两次是 generator didn't stop

@contextmanager 产生的对象同时也是装饰器(继承了 ContextDecorator),可以直接拿去装函数,省掉在函数体里再套一层 with:

from contextlib import contextmanager


@contextmanager
deftag():
print("<t>")
yield
print("</t>")


@tag()
defhello():
print("hi")


hello()
# <t>
# hi
# </t>

contextlib 里其他好用的工具

标准库里已经有一批现成的上下文管理器,日常写代码比自己手写 __enter__/__exit__ 更省事:

from contextlib import suppress, nullcontext, closing, ExitStack, chdir
import os

with suppress(ZeroDivisionError):   # 吞掉指定异常,替代空的 try/except/pass
1 / 0

with nullcontext(42as v:          # 3.7+,什么都不做的占位管理器
print(v)                        # 42

with ExitStack() as stack:          # 数量不固定的资源,统一注册、逆序释放
    files = [stack.enter_context(closing(obj)) for obj in objs]

with chdir('C:/Windows'):           # 3.11+,临时切换工作目录并自动切回
print(os.getcwd())

同时管理多个资源时,从 Python 3.10 起可以用括号把它们分行写,不再需要反斜杠续行:

with (
open('a.txt', encoding='utf-8'as fa,
open('b.txt''w', encoding='utf-8'as fb,
):
    fb.write(fa.read())

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-08-21 15:30:45 HTTP/2.0 GET : https://f.mffb.com.cn/a/508252.html
  2. 运行时间 : 0.356056s [ 吞吐率:2.81req/s ] 内存消耗:4,625.16kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=86d49d468e9f01e04d4e661114fb10cf
  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.001088s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001817s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.009916s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.002257s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001941s ]
  6. SELECT * FROM `set` [ RunTime:0.005122s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001974s ]
  8. SELECT * FROM `article` WHERE `id` = 508252 LIMIT 1 [ RunTime:0.019789s ]
  9. UPDATE `article` SET `lasttime` = 1787297445 WHERE `id` = 508252 [ RunTime:0.043240s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.005690s ]
  11. SELECT * FROM `article` WHERE `id` < 508252 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001455s ]
  12. SELECT * FROM `article` WHERE `id` > 508252 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.001242s ]
  13. SELECT * FROM `article` WHERE `id` < 508252 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.045085s ]
  14. SELECT * FROM `article` WHERE `id` < 508252 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.034889s ]
  15. SELECT * FROM `article` WHERE `id` < 508252 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.019649s ]
0.359530s