Python 异常链:from None 隐藏了旧报错,为什么上下文对象还在 错误对象与报错展示分别检查底层读配置失败,外层把它包装成更容易理解的错误,是常见做法。问题在于,普通 raise、raise from 原异常和 raise from None 并不只是报错文字不同。它们会改变异常链... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
Python literal_eval 解析边界:能读出列表,为什么算不出一加二 先确定你需要读取哪种文本一份内部小配置写着括号、列表和 None,看起来像 Python 对象。把它读回数据时,ast.literal_eval 可以识别一定范围的字面量与容器结构,但它不是一个通用表达式计算器。名字... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
JavaScript 正则匹配区间:相同文字出现两次,怎样标中真正捕获的那一段 解析日志后要高亮一个数字,代码先拿到捕获文本,再调用 indexOf 搜索它的位置。如果同一行里相同数字出现两次,就可能标错第一处。正则实际上已经知道自己匹配了哪一段,启用 d 标志便能把这份位置一并取回。匹配区间以... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
Bash wait -n -p:先结束的是哪个任务,退出码又属于谁 把三个检查任务放到后台后,父脚本需要知道谁先结束、哪个失败。只在最后执行不带参数的 wait,虽然能等待后台任务,却不能把每个任务的退出码逐一交出来。要建立可靠结果表,需要同时保留进程身份和等待状态。wait -n ... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
Git replace 对象视图:内容看起来换了,原来的对象为什么仍能读到 同一个对象编号,在一个仓库里读出新的内容,禁用某个选项又能读出旧内容。第一反应可能是对象损坏,但还应检查替换引用。Git replace 可以给对象访问建立一层替代关系,让很多命令看到另一个对象的内容。这项能力可用于... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
JavaScript 对象转原始值:同一个对象,拼接和乘法为什么走不同提示 一个封装数量的对象放进模板字符串时显示为“十二件”,乘以二却能算出二十四。随后有人用空字符串加对象来生成日志,又得到另一种文字。这里并非随机调用了某个方法,而是不同操作给对象转换提供了不同提示。Symbol.toPr... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
Bash 目录栈:popd 删除一个条目,为什么有时并不切换目录 连续进入几个目录后,popd 好像是“返回上一个目录”。但给它加上索引,当前位置可能完全不动;使用 dirs -c 清空目录栈后,当前路径也依旧存在。问题在于目录栈不是浏览器历史,它的首项始终与当前目录有关,其他条目... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
Git 改名检测:同一份暂存变化,为什么调高阈值就变成删除和新增 评审页面显示某文件改名了,换一个命令却显示旧文件被删除、新文件被添加。两次查看的是同一份暂存内容,究竟哪一个错了?可以先排除一种直觉:Git 并没有在每次提交里保存一条独立的“移动文件”命令。差异计算可以根据旧路径消... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
JavaScript 正则 split:只是加了括号,分隔符为什么也进了结果 一段拆分编号的代码原本返回三个字段。为了让正则更好读,开发者给分隔符套上一层括号,结果数组忽然多出逗号;再加一个可选分组,数组里连 undefined 都出现了。这通常不是输入文件坏了,而是捕获组改变了 split ... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
JavaScript 标签模板:raw 保留了反斜杠,插值为什么仍然会执行 给字符串前面加上 String.raw,路径里的反斜杠就能保留下来。于是有人进一步推断:模板中的所有东西都变成了原样文本,美元符号花括号里的调用也不会发生。这个推断会让配置生成器出现意外副作用,因为“原始片段”与“插... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读