ITPub博客

首页 > 应用开发 > Python

关于 “Python” 的内容如下:

  • pathlib 与符号链接的潜在异常

    pathlib 在处理**符号链接(symlink)**时确实有不少“暗坑”,尤其是涉及 .resolve()、文件操作、权限、跨平台行为时,很容易踩异常或得到和预期不一致的结果。下面把常见异常 + 触发场景 + 正确用法给你讲透。一、最常见异常一览1️⃣ FileNotFoundError(断链)from pathlib import Pathp = Path("broken_link

    tiannuo Python 858 2026-05-25 15:32
  • Python 中循环引用导致的 __del__ 不调用

    一、问题本质:为什么 __del__ 不执行?Python 主要用两种机制回收对象:1️⃣ 引用计数(Reference Counting)对象引用数变成 0 → 立刻销毁 → 调用 __del__2️⃣ 垃圾回收器(GC,处理循环引用)用于处理这种情况:a = A()b = B()a.b = bb.a = a👉 这就是循环引用⚠️ 关键点来了:👉 带有 __del__ 的对象,如果存在循环引用,

    tiannuo Python 876 2026-05-25 15:30
  • 使用 weakref.finalize 释放资源的微妙问题

    Python 的 weakref.finalize 经常被当成:“比 __del__ 更安全的资源释放方案”确实它解决了:循环引用导致 __del__ 不执行GC 顺序问题对象销毁崩溃但它本身也有很多非常隐蔽的边缘行为。尤其:文件句柄socketSelenium driverasyncio 对象ctypes 资源数据库连接临时文件这些场景里很容易踩坑。1. finalize 并不保证立即执行很多人

    tiannuo Python 468 2026-05-24 11:13
  • float 精度问题在边缘场景中的奇异表现

    Python 的 float 本质是:IEEE 754 双精度浮点数(64 位)它不是“真实小数”,而是:符号位 + 指数位 + 尾数位因此很多十进制数字根本无法被精确表示。大多数人知道:0.1 + 0.2 != 0.3但真正危险的,其实是一些“边缘场景”的奇异行为。这些问题:不容易复现不一定报错看起来像 Python Bug实际是浮点底层设计导致1. 0.1 + 0.2 只是最基础的问题经典例子

    tiannuo Python 511 2026-05-24 11:12
  • datetime 模块时区处理的潜在陷阱

    Python 的 datetime 模块最容易出问题的地方,不是语法,而是:“它很多行为看起来正常,但实际在跨时区、夏令时、时间比较时会 silently 出错。”尤其是:日志系统爬虫定时任务数据库存储分布式系统Selenium 自动化API 时间戳转换这些场景里,时区坑非常多。1. naive datetime 与 aware datetime 混用最经典的问题:from datetime im

    tiannuo Python 527 2026-05-24 11:10
  • Python 内置函数缓存的不一致行为

    1. id() 看起来“不唯一”很多人以为:id(x)返回的是“唯一”的对象编号。实际上它只保证:在对象生命周期内唯一。对象销毁后,内存地址可能复用。例如:a = [1, 2]print(id(a))del ab = [3, 4]print(id(b))有时候两个 id 会一样。因为:CPython 的 id() 本质是内存地址Python 有对象池和内存复用机制所以:id() != 全局唯一ID

    tiannuo Python 490 2026-05-24 11:08
  • ctypes 调用 C 库时的内存管理问题

    在 Python 里用 ctypes 调用 C 库是非常方便的,但同时也是 内存管理的高风险区。这里的问题主要源自:Python 自动管理内存(垃圾回收)C 需要手动管理内存两者交互时容易产生 悬空指针、内存泄漏或双重释放我把核心问题梳理一下。1. Python 对 ctypes 的对象管理基本情况import ctypeslib = ctypes.CDLL("./mylib.so&qu

    tiannuo Python 466 2026-05-23 14:58
  • Python 中的多重继承钻石问题

    Python 的“钻石继承(Diamond Inheritance)”是多重继承里最经典的问题之一。它最大的难点不是语法。而是:多个父类之间到底该按什么顺序初始化和调用方法。很多人第一次接触时都会被:super()MRO重复初始化方法调用顺序绕晕。什么是钻石继承结构像这样:        A       / \&nbs

    tiannuo Python 447 2026-05-23 14:57
  • python sys.settrace 对性能的意外影响

    sys.settrace() 是 Python 里一个非常“底层”的调试钩子。很多人只知道:调试器会用它coverage 会用它profile 工具会用它但真正容易踩坑的是:只要启用了 trace,整个 Python 解释器的执行模型都会改变。而且影响远比很多人想象的大。sys.settrace() 是什么最简单例子:import sysdef tracer(frame, event, arg):

    tiannuo Python 432 2026-05-23 14:56
  • python asyncio.gather 中异常吞噬的问题

    asyncio.gather() 是 Python 异步编程里非常常见的并发工具,但它有一个很容易踩坑的点:异常处理行为并不直观。很多人以为某个协程报错后一定会立刻抛出异常,但实际上可能出现:异常被“吞掉”其他任务继续运行某些异常永远没人处理日志里出现 Task exception was never retrieved下面把几个核心问题拆开讲。asyncio.gather() 的默认行为先看最常

    tiannuo Python 441 2026-05-23 14:54
  • 工业协议调试,我花了2万买设备,最后发现免费工具就能搞定

    一、一个真实的踩坑经历去年接了个智慧工厂项目,需要对接西门子 S7-1200 PLC、Modbus 温控仪表,还有几台 MQTT 协议的传感器。第一步:买设备。西门子 S7-1200:¥3,800Modbus RTU 转 TCP 网关:¥1,200各种传感器、电源、线缆:¥2,500合计:¥7,500设备到了,发现 PLC 程序是客户写的,不能随便改。我想先测试自己的采集程序对不对,结果——没设备

    suoten Python 537 2026-05-22 11:51
  • Python 中使用负数步长切片的非直观行为

    1️⃣ 基础回顾:切片语法seq[start:stop:step]start:起始索引(包含)stop:结束索引(不包含)step:步长(默认 1,可为负数)负数索引允许从序列尾部开始计数核心规则:向前切片(step>0):从 start → stop(不含 stop)向后切片(step<0):从 start → stop(不含 stop,方向倒过来)2️⃣ 负数步长的微妙行为(a)默

    tiannuo Python 437 2026-05-21 11:04
  • python中setattr 与 __slots__ 的冲突

    1️⃣ 背景:__slots__ 的作用Python 中普通类的实例有一个 __dict__ 存储属性:class A:    passa = A()a.x = 10  # 存在 __dict__print(a.__dict__)  # {'x': 10}问题:如果类属性多、实例多,__dict__ 占用内存大。解决方案:使用 __slots

    tiannuo Python 432 2026-05-21 11:03
  • Python 生成器在异常传播中的边缘行为

    1️⃣ 基础:生成器的异常传播在 Python 中,生成器是一种 可迭代对象,可以暂停和恢复执行:def gen():    yield 1    yield 2当异常在生成器内部发生时,如果没有捕获,会 传播到外部迭代者:def gen():    yield 1    raise ValueError("

    tiannuo Python 444 2026-05-21 11:02
  • importlib.reload 对模块状态的微妙影响

    1️⃣ 基本行为importlib.reload(module) 的作用:重新执行模块的 顶层代码(即模块文件中的所有语句)。返回模块对象本身(与原来的模块对象同一个引用)。不会重新创建模块对象,所以原来的模块引用仍然有效。import mymoduleimport importlibmymodule.x = 10importlib.reload(mymodule)print(mymodule.x

    tiannuo Python 430 2026-05-21 11:01
  • 工业物联网协议仿真平台ProtoForge V1.0.0发布:一台电脑模拟17种工业设备

    一、一个真实的开发困境去年接一个物联网网关项目,客户要求对接西门子S7、三菱MC、Modbus TCP、GB28181国标摄像头四种协议。问题是我手边一台真实设备都没有:西门子S7-1200 PLC 市场价 3000+海康威视摄像头支持GB28181的 500+三菱FX5U PLC 2500+还有各种传感器、CNC数控机床...等采购流程走完,项目 deadline 早就过了。最后只能硬着头皮写代

    suoten Python 511 2026-05-21 10:27
  • Python 的整数溢出与大整数优化陷阱

    1️⃣ Python 整数类型与溢出机制Python 2 vs Python 3Python 2:int:固定大小,溢出会自动转换为 long。long:任意大小整数,末尾带 L。a = 2**31 - 1  # intb = 2**31      # 自动转 longprint(type(b))  # <type 'long&#39

    tiannuo Python 1016 2026-05-20 16:52
  • inspect 模块解析动态函数签名的局限性

    1️⃣ inspect.signature 的基础inspect.signature(func) 可以获取一个函数的 参数签名:import inspectdef foo(a, b=2, *args, c, d=4, **kwargs):    passsig = inspect.signature(foo)print(sig)# 输出: (a, b=2, *args, c,

    tiannuo Python 991 2026-05-20 16:51
  • Python 异常链 (__context__) 的意外展示

    1️⃣ Python 异常链基础Python 异常对象有几个相关属性:属性含义__context__当前异常发生时另一个异常正被处理(未被 from 显式指定)__cause__通过 raise ... from ... 显式指定的异常原因__suppress_context__如果为 True,在 raise ... from ... 时不显示 __context__举例try:  &

    tiannuo Python 948 2026-05-20 16:50
  • threading.Event 在特定条件下的死锁问题

    1️⃣ threading.Event 基础回顾import threadinge = threading.Event()# 线程 Ae.wait()  # 阻塞直到 e.set() 被调用# 线程 Be.set()   # 触发 event,所有 wait 的线程会继续执行Event 本质上是一个线程安全的 标志位。wait() 会阻塞当前线程直到标志位为 True

    tiannuo Python 944 2026-05-20 16:49
点击加载更多下一页

成为大咖

联系我们
itpub
help@itpub.net
ITPUB-饶
扫描二维码联系客服
关于• 广告服务• 使用条款
京ICP备16024965号
经营性网站备案信息
网络110报警服务
中国互联网举报中心
北京互联网违法和不良信息举报中心

关注公众号获取更多技术文章