当前位置:首页>python>Python之错误与异常处理

Python之错误与异常处理

  • 2026-02-28 01:15:53
Python之错误与异常处理

第七章 错误与异常处理

1. 错误与异常

在Python(以及许多编程语言)中,错误异常是紧密相关但又有所区别的概念。简单来说,错误通常指程序无法正常运行的问题,而异常则是程序运行过程中出现的、可以被捕获和处理的事件。

1.1 错误(Error)

错误通常是程序在语法层面逻辑层面的严重问题,导致程序无法被解释器执行或继续运行。常见的错误有两类:

语法错误(Syntax Error)

  • 定义:代码不符合Python语法规则,解释器无法解析。例如缺少冒号、括号不匹配、拼错关键字等。
  • 特点:程序根本无法开始运行,解释器会在第一处语法错误处报错并停止。

逻辑错误(Logical Error)

  • 定义:代码语法正确,但逻辑上不正确,导致程序结果不符合预期。例如除零、无限循环、算法错误等。
  • 特点:程序可以运行,但结果错误或崩溃(崩溃时会引发异常)。

在Python文档中,错误常特指语法错误,因为语法错误是在编译/解析阶段就被发现的。而逻辑错误往往在运行时表现为异常。

if True# 缺少冒号
    print("Hello")
# 运行时会报:SyntaxError: expected ':'

1.2 异常(Exception)

异常是程序运行期间发生的、干扰正常指令流程的事件。当Python解释器遇到无法处理的运行时错误时,它会创建一个异常对象并抛出(raise)。如果程序没有捕获这个异常,程序就会终止并显示错误信息(即“回溯”Traceback)。

即:代码在语法上没问题,但执行过程中出现了问题。— 可以通过异常处理机制解决

# 异常:代码在语法上没问题,但执行过程中出现了问题。———— 可以通过异常处理机制解决
# 一些开发中常见的异常:
# 1.ZeroDivisionError:当除数为 0 时触发。
num1 = 100
num2 = 0
result = num1 / num2
# 执行结果:ZeroDivisionError: division by zero

# 2.TypeError:当操作的数据类型不正确或不兼容时触发。
result = '10' + 5
# 执行结果:TypeError: can only concatenate str (not "int") to str

# 3.AttributeError: 当对象没有指定的属性或方法时触发。
# 演示1
class Person:
    def__init__(self, name, age):
        self.name = name
        self.age = age

p1 = Person('张三'18)
print(p1.name)
print(p1.age)
print(p1.gender)
# 执行结果:AttributeError: 'Person' object has no attribute 'gender'

# 演示2
nums = [102030]
nums.add(40)
# 执行结果:AttributeError: 'list' object has no attribute 'add'

# 4.IndexError:当索引超出范围(索引越界)时触发。
nums = [10203040]
print(nums[4])
# 执行结果:IndexError: list index out of range

# 5.NameError:当使用了不存在的变量时触发。
print(school)
# 执行结果:NameError: name 'school' is not defined

# 6.KeyError:当访问字典中不存在的 key 时触发。
person = {'name':'张三''age':18}
print(person['gender'])
# 执行结果:KeyError: 'gender'

# 7.ValueError:当值不合法,但类型正确时触发。
int('hello')
# 执行结果:ValueError: invalid literal for int() with base 10: 'hello'

Python 中异常类的继承关系(层级关系)如下(了解即可):

其中:BaseException是所有异常类的父类,Exception中包含的是开发中常见的业务异常。

BaseException
 ├── BaseExceptionGroup
 ├── GeneratorExit
 ├── KeyboardInterrupt
 ├── SystemExit
 └── Exception
      ├── ArithmeticError
      │    ├── FloatingPointError
      │    ├── OverflowError
      │    └── ZeroDivisionError
      ├── AssertionError
      ├── AttributeError
      ├── BufferError
      ├── EOFError
      ├── ExceptionGroup [BaseExceptionGroup]
      ├── ImportError
      │    └── ModuleNotFoundError
      ├── LookupError
      │    ├── IndexError
      │    └── KeyError
      ├── MemoryError
      ├── NameError
      │    └── UnboundLocalError
      ├── OSError
      │    ├── BlockingIOError
      │    ├── ChildProcessError
      │    ├── ConnectionError
      │    │    ├── BrokenPipeError
      │    │    ├── ConnectionAbortedError
      │    │    ├── ConnectionRefusedError
      │    │    └── ConnectionResetError
      │    ├── FileExistsError
      │    ├── FileNotFoundError
      │    ├── InterruptedError
      │    ├── IsADirectoryError
      │    ├── NotADirectoryError
      │    ├── PermissionError
      │    ├── ProcessLookupError
      │    └── TimeoutError
      ├── ReferenceError
      ├── RuntimeError
      │    ├── NotImplementedError
      │    ├── PythonFinalizationError
      │    └── RecursionError
      ├── StopAsyncIteration
      ├── StopIteration
      ├── SyntaxError
      │    └── IndentationError
      │         └── TabError
      ├── SystemError
      ├── TypeError
      ├── ValueError
      │    └── UnicodeError
      │         ├── UnicodeDecodeError
      │         ├── UnicodeEncodeError
      │         └── UnicodeTranslateError
      └── Warning
           ├── BytesWarning
           ├── DeprecationWarning
           ├── EncodingWarning
           ├── FutureWarning
           ├── ImportWarning
           ├── PendingDeprecationWarning
           ├── ResourceWarning
           ├── RuntimeWarning
           ├── SyntaxWarning
           ├── UnicodeWarning
           └── UserWarning

2. 异常处理

2.1 为什么需要进行异常处理

  1. 程序运行过程中出现的异常,如果得不到处理,那程序就会立即崩溃,导致后续代码无法执行。
  2. 异常处理不是让异常消失,而是将异常捕获到,随后根据异常的具体情况,来执行指定的逻辑。
print('欢迎使用本程序')
a = int(input('请输入第一个数:'))
b = int(input('请输入第二个数:'))
result = a / b
print(f'{a}除以{b}的结果是:{result}')
print('*******我是后续的其它逻辑1*******')
print('*******我是后续的其它逻辑2*******')
# 以上程序a,b输入正确数字可以得到结果,如果输入字母,中文,或者b=0等,就会报错。

2.2 异常处理(初级方式)

核心规则如下:

  1. 将可能出现异常的代码放在try中,出现异常后的处理代码写在except中。

  2. 如果try中的代码出现异常,那try中的后续代码不会执行,并自动跳转到except中。

  3. 如果try中的代码没有异常,那except中的代码就不会执行。

  4. 无论是否发生异常,try-except后面的代码都会继续执行。

  5. 直接写except捕获到Python中所有的异常 ———— 实际开发中不推荐这样做,因为这种异常捕捉范围太大,不便于程序代码的排查。

# 异常处理(初级):
# 1.将可能出现异常的代码放在 try 中,出现异常后的处理代码写在 except 中。
# 2.如果 try 中的代码出现异常,那 try 中的后续代码将不会执行,并自动跳转到 except 中处理异常。
# 3.如果 try 中的代码没有异常,那 except 中的代码就不会执行。
# 4.无论是否发生异常,try-except 后面的代码都会继续执行。
# 5.直接写 except 会捕获到 Python 中所有的异常 ———— 实际开发中不推荐这样做,因为这种异常捕捉范围太大,不便于程序代码的排查。
print('欢迎使用本程序')
try:
    a = int(input('请输入第一个数:'))
    b = int(input('请输入第二个数:'))
    result = a / b
    print(f'{a}除以{b}的结果是:{result}')
except:
    print('抱歉,程序出现了异常!')
print('*******我是后续的其它逻辑1*******')
print('*******我是后续的其它逻辑2*******')
# 以上程序a,b输入正确数字可以得到结果,如果输入字母,中文,或者b=0等,就会出现异常信息,但不会影响程序的后续执行。

2.3 捕获指定类型的异常

# 异常处理(捕获指定的类型的异常)
print('欢迎使用本程序')
try:
    a = int(input('请输入第一个数:'))
    b = int(input('请输入第二个数:'))
    result = a / b
    print(f'{a}除以{b}的结果是:{result}')
except ZeroDivisionError:
    print('程序异常:0不能作为除数!'# 当b = 0时,会抛出此类异常,程序会走此处异常。
except ValueError:
    print('程序异常:您输入的必须是数字!'# 当a或者b输入的不是数字时,程序会走此处抛出对应异常。
print('*******我是后续的其它逻辑1*******')
print('*******我是后续的其它逻辑2*******')

2.4 异常类之间的继承关系

# 验证一下异常类之间的继承关系(和异常层级结构对比一目了然)
# issubclass(class, classinfo) 是Python内置函数,用于判断一个类是否是另一个类或一组类(由classinfo指定)的子类。
print(issubclass(ZeroDivisionError, ArithmeticError)) # True
print(issubclass(ZeroDivisionError, Exception)) # True
print(issubclass(ValueError, Exception)) # True
print(issubclass(KeyboardInterrupt, Exception)) # False
print(issubclass(KeyboardInterrupt, BaseException)) # True

2.5 多个异常处理

多个异常从上往下匹配,匹配成功后不再向下匹配。

print('欢迎使用本程序')
try:
    a = int(input('请输入第一个数:'))
    b = int(input('请输入第二个数:'))
# print(x) # 此出代码可以打开和注释看异常执行效果
    result = a / b
    print(f'{a}除以{b}的结果是:{result}')
except ZeroDivisionError:
    print('程序异常:0不能作为除数!'# 当b=0时,匹配抛出此异常,下面的异常不会执行。
except ValueError:
    print('程序异常:您输入的必须是数字!'# 当a或者b不是数字时,匹配抛出此异常,下面的异常不会执行。
except Exception:
    print('程序异常!'# 所以异常为匹配到,抛出此异常,该异常范围最大。
print('*******我是后续的其它逻辑1*******')
print('*******我是后续的其它逻辑2*******')

2.6 获取异常的具体信息

通过e变量,可以获取异常相关的信息,也可以借助traceback去格式化异常信息。

# 获取异常的具体信息
print('欢迎使用本程序')
try:
    a = int(input('请输入第一个数:'))
    b = int(input('请输入第二个数:'))
    print(x) # 此出代码可以打开和注释看异常执行效果
    result = a / b
    print(f'{a}除以{b}的结果是:{result}')
except ZeroDivisionError:
    print('程序异常:0不能作为除数!')
except ValueError:
    print('程序异常:您输入的必须是数字!')
except Exception as e:
    print(f'程序异常,异常信息:{e}')
    print(f'程序异常,异常类型:{type(e)}')
    print(f'程序异常,异常参数:{e.args}')
    print(f'程序异常,异常的文件:{e.__traceback__.tb_frame.f_code.co_filename}')
    print(f'程序异常,异常的具体行数:{e.__traceback__.tb_lineno}')
# 通过 traceback 来回溯异常
import traceback
    print(traceback.format_exc()) # NameError: name 'x' is not defined
print('*******我是后续的其它逻辑1*******')
print('*******我是后续的其它逻辑2*******')

2.7 一个except捕获不同的异常

# 一个 except,也可以捕获不同的异常
print('欢迎使用本程序')
try:
    a = int(input('请输入第一个数:'))
    b = int(input('请输入第二个数:'))
    print(x) # 此出代码可以打开和注释看异常执行效果
    result = a / b
    print(f'{a}除以{b}的结果是:{result}')
except (ZeroDivisionError, ValueError, Exception) as e:
if isinstance(e, ZeroDivisionError):
        print('程序异常:0不能作为除数!')
elif isinstance(e, ValueError):
        print('程序异常:您输入的必须是数字!')
else:
        print(f'程序异常:{e}')
print('*******我是后续的其它逻辑1*******')
print('*******我是后续的其它逻辑2*******')

2.8 异常完整写法

  1. try:尝试去做可能会出现异常的事情。

  2. except:出现异常时的处理(出现异常时怎么补救)。

  3. else:如果一切顺利(没有异常出现)要做的事。

  4. finall:无论有没有异常,都要做的事。

# 异常处理的完整写法:
# 1.try:尝试去做可能会出现异常的事情
# 2.except:出现异常时的处理(出现异常时怎么补救)
# 3.else:如果一切顺利(没有异常出现)要做的事
# 4.finally:无论有没有异常,都要做的事
print('欢迎使用本程序')
try:
    a = int(input('请输入第一个数:'))
    b = int(input('请输入第二个数:'))
    result = a / b
    print(f'{a}除以{b}的结果是:{result}')
except (ZeroDivisionError, ValueError, Exception) as e:
if isinstance(e, ZeroDivisionError):
        print('程序异常:0不能作为除数!')
elif isinstance(e, ValueError):
        print('程序异常:您输入的必须是数字!')
else:
        print(f'程序异常:{e}')
else:
    print('挺好的,try中的代码没有任何异常!')
finally:
    print('无论有没有异常,我的计算都结束了!')
print('*******我是后续的其它逻辑1*******')
print('*******我是后续的其它逻辑2*******')

3. 手动抛出异常

当程序遇到不符合预期情况时,可以使用raise语句手动触发(抛出)异常。

在 Python 中,raise 语句用于手动抛出异常即主动触发一个异常,中断当前代码的执行流程,并将异常传递给调用者。根据使用场景,raise 有多种常见用法:

3.1 抛出一个指定的异常

def withdraw(amount):
    if amount < 0:
        raise ValueError("取款金额不能为负数")   # 抛出异常
    print(f"取款 {amount} 元")

# 调用时触发异常
withdraw(-100)   # 抛出 ValueError: 取款金额不能为负数
  • 异常类可以是 Python 内置的(如 ValueErrorTypeError),也可以是自定义的异常类(继承自 Exception)。
  • 通常需要传入一个字符串作为错误信息,方便调试。

3.2 在 except 块中重新抛出当前异常

如果在捕获异常后,你只做部分处理(比如记录日志),但希望异常继续向上传递,可以使用不带参数的 raise

这种方式会保留原始的异常堆栈信息,非常有利于调试。

try:
    x = int("abc")
except ValueError as e:
    print("记录日志:转换失败")
    raise# 重新抛出刚刚捕获的异常,保留原始调用栈
# 执行结果:
# 记录日志:转换失败
# Traceback (most recent call last):
# ValueError: invalid literal for int() with base 10: 'abc'

3.3 抛出另一个异常(异常链 - raise ... from ...

有时在捕获一个异常后,你想将其包装成另一种异常抛出,同时保留原始异常的信息。可以使用 raise ... from ...

try:
    1 / 0
except ZeroDivisionError as e:
    raise ValueError("计算时发生除零错误"from e

# 执行结果:
# ValueError: 计算时发生除零错误

并且会附带 "The above exception was the direct cause of the following exception" 的说明,指出原始异常。

如果不想保留异常链,可以使用 from None 来抑制原始异常的显示:

try:
    1 / 0
except ZeroDivisionError as e:
    raise ValueError("新异常"from None

# 执行结果:ValueError: 新异常

3.4 不带参数的 raise(只能在 except 块中使用)

它重新抛出当前正在处理的异常,相当于 raise e 但更简洁。

3.5 抛出一个异常对象

除了抛出异常类,你也可以先创建异常对象再抛出:

# 这等价于 raise ValueError("自定义错误信息")。
err = ValueError("自定义错误信息")
raise err
# 执行结果如下:
# ValueError: 自定义错误信息

3.6 总结

raise 的核心用途是:

  • 主动报告错误(参数非法、状态不满足等)。
  • 在异常处理后重新抛出(保留原始异常或包装为新异常)。

4. 异常的传递机制

在 Python 中,异常的传递机制指的是当程序运行过程中发生异常时,解释器如何沿着函数的调用链(调用栈)向上查找能够处理该异常的 except 块,直到找到合适的处理器或到达程序顶层。理解这一机制有助于编写健壮的异常处理代码。

  1. 如果异常没有被当前代码块所捕获处理,那该异常就会沿着调用链,逐层传递给其调用者。

  2. 如果所有调用者,都没有捕获该异常,那最终程序将因未处理异常而意外终止。

4.1 异常传递的基本过程

当一个异常被 raise(无论是 Python 解释器自动触发,还是手动抛出)时,程序会立即中断当前代码的正常执行,并开始沿调用栈向上回溯

  1. 在当前函数内部查找解释器检查当前函数中是否有 try...except 语句包围了发生异常的代码,并且 except 块能够匹配该异常类型。

    • 如果找到匹配的 except,则执行该 except 块中的代码,然后异常被处理,程序从 try...except 结构之后的代码继续执行(除非 except 块中再次抛出异常)。

    • 如果当前函数中没有合适的 try...except,则将异常传递给调用当前函数的上一级函数

  2. 在上一级函数中继续查找上一级函数会重复同样的过程:检查该函数中是否有包围函数调用的 try...except

    • 如果有,则处理异常。
    • 如果没有,则继续向上传递。
  3. 到达程序顶层(模块层级)如果异常一直传递到程序的顶层(即全局作用域)仍未被捕获,Python 解释器将终止程序执行,并在标准错误输出中打印异常的回溯信息(Traceback),显示异常发生的位置和调用链。

def func_c():
    print("进入 func_c")
# 这里发生一个除零异常
    result = 10 / 0# ZeroDivisionError
    print("func_c 结束")  # 这行不会执行

def func_b():
    print("进入 func_b")
    func_c()  # 调用 func_c
    print("func_b 结束")  # 也不会执行(除非异常被捕获)

def func_a():
    print("进入 func_a")
    try:
        func_b()  # 调用 func_b
    except ZeroDivisionError:
        print("在 func_a 中捕获到除零异常")
    print("func_a 结束")

func_a()
# 程序执行结果如下:
# 进入 func_a
# 进入 func_b
# 进入 func_c
# 在 func_a 中捕获到除零异常
# func_a 结束
# 异常的传递机制:
# 1.如果异常没有被当前代码块所捕获处理,那该异常就会沿着调用链,逐层传递给其调用者。
# 2.如果所有调用者,都没有捕获该异常,那最终程序将因【未处理异常】而意外终止。
def test1():
    print('******test1开始******')
    result = '100' + 100
    print('******test1结束******')

def test2():
    print('******test2开始******')
    try:
        test1()
    except Exception as e:
        print(f'程序异常:{e}')
    print('******test2结束******')

def test3():
    print('******test3开始******')
    test2()
    print('******test3结束******')

test3()

# 程序执行结果如下:
# ******test3开始******
# ******test2开始******
# ******test1开始******
# 程序异常:can only concatenate str (not "int") to str
# ******test2结束******
# ******test3结束******

4.2 异常传递的关键点

  1. 异常类型匹配
  • except 可以指定捕获的异常类型(可以是单个类,也可以是元组)。只有异常的类型与指定的类型相匹配(或为其子类)时,才会被捕获。
  1. 多个 except 块的顺序:
  • try 语句可以有多个 except 块,解释器会·按顺序·检查,执行第一个匹配的 except。因此,更具体的异常类型应该放在前面,通用的(如 Exception)放在后面。
  1. else 和 finally 的作用
  • else:仅在 try 块中没有发生异常时执行。

  • finally:无论是否发生异常,也不论异常是否被捕获,finally 块中的代码总会执行(除非在 finally 之前程序被强制终止,如 os._exit())。finally 常用于释放资源(关闭文件、网络连接等)。但需要注意的是,如果在 finally 中使用了

    finally 常用于释放资源(关闭文件、网络连接等)。但需要注意的是,如果在 finally 中使用了 return 或抛出了新的异常,可能会影响原异常的传递。

  1. 重新抛出异常
  • 在 except 块中,可以使用 raise(不带参数)重新抛出当前捕获的异常,让异常继续向上传递。这常用于记录日志后,仍希望上层处理。
  1. 异常链
  • 通过 raise ... from ... 可以显式地链接异常,表明当前异常是由另一个异常引起的。在传递过程中,回溯信息会保留原始异常链。

4.3 没有捕获时的最终结果

如果异常最终未被任何 except 捕获,解释器会打印 Traceback 并终止程序。

def outer():
    inner()

def inner():
    1 / 0

outer()
# 执行结果类似如下:
# Traceback (most recent call last):
#   File "example.py", line 7, in <module>
#     outer()
#   File "example.py", line 2, in outer
#     inner()
#   File "example.py", line 5, in inner
#     1 / 0
# ZeroDivisionError: division by zero

回溯信息清晰地展示了异常从 inner 到 outer 再到模块层级的传递路径。

4.4 总结

Python 的异常传递机制是一种基于调用栈的自动回溯,它使得错误处理可以集中在合适的层次进行,而不必在每个函数中手动检查错误码。理解这一机制能帮助你设计更清晰的错误处理策略,并在调试时快速定位问题根源。

5. 自定义异常类

  1. 由开发人员自己定义一个异常类,用来表示代码中更具体、更有业务含义的异常。

  2. 具体规则:定义一个类(类名通常以Error结尾),继承Exception类或它的子类。

# 自定义异常类:
# 1.由开发人员自己定义一个异常类,用来表示代码中“更具体、更有业务含义”的异常。
# 2.具体规则:定义一个类(类名通常以 Error 结尾),继承 Exception 类或它的子类。

class SchoolNameError(Exception):
    def __init__(self, msg):
        super().__init__('【姓名长度异常】' + msg)

def check_school_name(name):
    if len(name) > 10:
        raise SchoolNameError('姓名长度过长')
    else:
        print('姓名长度是合法的')

try:
    check_school_name('zhangsansansansansan')
except SchoolNameError as e:
    print(f'程序异常:{e}'# 程序异常:【姓名长度异常】姓名长度过长

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-02-28 21:26:32 HTTP/2.0 GET : https://f.mffb.com.cn/a/477262.html
  2. 运行时间 : 0.077781s [ 吞吐率:12.86req/s ] 内存消耗:5,149.80kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=d786714c2618503231283bbbb15c49a5
  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.000399s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000966s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000353s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000224s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000563s ]
  6. SELECT * FROM `set` [ RunTime:0.000203s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000611s ]
  8. SELECT * FROM `article` WHERE `id` = 477262 LIMIT 1 [ RunTime:0.000536s ]
  9. UPDATE `article` SET `lasttime` = 1772285192 WHERE `id` = 477262 [ RunTime:0.000699s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.000290s ]
  11. SELECT * FROM `article` WHERE `id` < 477262 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000522s ]
  12. SELECT * FROM `article` WHERE `id` > 477262 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.001449s ]
  13. SELECT * FROM `article` WHERE `id` < 477262 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.000995s ]
  14. SELECT * FROM `article` WHERE `id` < 477262 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.001070s ]
  15. SELECT * FROM `article` WHERE `id` < 477262 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.001070s ]
0.079308s