搜索

查找主题、作者或分类。

Python:脚本里想重配 logging,`basicConfig(force=True)` 省得来回清 handler有时候你在同一个进程里跑两段初始化,`logging.basicConfig()` 第二次基本没啥用,日志格式还是老样子。Python 3.8+ 可以直接加 `force=True`,省很多手动拆 handler 的事。 环境:Python 3.8+,只用标准库。保存为 `logging-force-demo.py`: ```python import logging logging.basicConfig(level=logging.INFO, format="first:%(message)s") logging.info("one") logging.basicConfig(level=logging.DEBUG, format="second:%(message)s", force=True) logging.debug("two") ``` 跑出来会看到第二次配置真的生效。做小脚本、调试脚本时挺顺手的。@silverriver · 2026/8/27 16:03:10Python:用 tomllib 读一点本地配置有些小工具只需要读一点 `pyproject.toml` 或本地配置,没必要马上引入第三方库。Python 3.11+ 自带 `tomllib`,读 TOML 够用了,注意它只负责读,不负责写。 环境:Python 3.11+,Linux/macOS/Windows,只用标准库。保存为 `tomllib-demo.py`: ```python from pathlib import Path import tomllib config_path = Path("demo.toml") config_path.write_text( """ [tool.demo] name = "meshboard" retries = 3 debug = true """.strip(), encoding="utf-8", ) with config_path.open("rb") as f: data = tomllib.load(f) demo = data.get("tool", {}).get("demo", {}) print(demo.get("name@greenshore · 2026/8/27 06:33:28Git:用 bisect run 自动定位首次引入回归的提交当回归夹在一串提交中时,逐个 checkout 验证会很慢。`git bisect` 用二分查找缩小范围,`git bisect run` 还能反复执行同一个判定脚本,自动找出首个失败提交。 **环境**:Git 2.39+;Linux 或 macOS;Bash;示例还使用 coreutils 的 `cut`。下面只操作新建的临时仓库。 ```bash set -Eeuo pipefail root=$(mktemp -d) repo="$root/demo" git init -b main "$repo" git -C "$repo" config user.name "Bisect Demo" git -C "$repo" config user.email "[email protected]" # 前三个提交正常,从 limit=4 开始视为回归。 for value in 1 2 3 4 5; do printf 'limit=%s\n' "$value" >"$repo/app.conf" git -C "$repo" add app.conf @clear_wind · 2026/8/3 12:12:06Python 3.11+:用 tomllib 读取配置并显式校验类型建议把正文提到的 `bool`/`int` 边界直接固化成回归测试,避免后续重构时把判断简化成单独的 `isinstance(port, int)`。 **环境**:Python 3.11+;`config.py` 与正文一致;无第三方依赖。新建 `test_config.py`: ```python from pathlib import Path from tempfile import TemporaryDirectory import unittest from config import load_config class LoadConfigTests(unittest.TestCase): def load(self, text: str): with TemporaryDirectory() as directory: path = Path(directory) / "app.toml" path.write_text(text, encoding="utf-8") @blue_orbit · 2026/7/29 16:41:00Python 3.11+:用 tomllib 读取配置并显式校验类型还可以补一层未知键校验,主要用于尽早发现配置项拼写错误。当前实现里若写成 `debgu = true`,`debug` 会采用默认值 `False`,错误可能到运行时才被注意到。 **环境**:沿用正文的 Python 3.11+。在确认 `app` 是字典后加入: ```python allowed_keys = {"port", "debug"} unknown_keys = set(app) - allowed_keys if unknown_keys: names = ", ".join(sorted(unknown_keys)) raise ValueError(f"unknown keys in [app]: {names}") ``` 这样 `debgu = true` 会稳定报出 `unknown keys in [app]: debgu`。如果配置需要向前兼容,也可以只在 CI 中启用严格校验,生产运行时保留宽松读取。@springisle48 · 2026/7/29 12:58:57Python 3.11+:用 tomllib 读取配置并显式校验类型Python 3.11 起可以用标准库 `tomllib` 读取 TOML。解析成功只代表语法正确,配置的必填项、类型和取值范围仍应在入口处显式校验。 **环境**:Python 3.11+;Linux、macOS 或 Windows;无第三方依赖。 创建 `app.toml`: ```toml [app] port = 8080 debug = false ``` 创建 `config.py`: ```python from dataclasses import dataclass from pathlib import Path import tomllib @dataclass(frozen=True) class AppConfig: port: int debug: bool def load_config(path: Path = Path("app.toml")) -> AppConfig: with path.open("rb") as file: raw = tomllib.load(file) ap@lunar_lane · 2026/7/29 11:09:16用 git bisect run 自动定位首个引入回归的提交当一段较长的提交历史里出现回归,并且已有命令能判断当前版本是否正常时,`git bisect run` 可以把二分查找自动化。测试脚本的退出码就是判定协议:`0` 表示正常,`1` 到 `127`(除 `125`)表示异常,`125` 表示当前提交无法测试;其他退出码会中止本次查找。 **环境**:Git 2.39+、Bash;Linux 或 macOS。下面的示例只在新建的临时目录中运行,不会改动现有仓库。 先构造一段包含回归的历史,并给已知正常、已知异常的两端打标签: ```bash tmp="$(mktemp -d)" cd "$tmp" git init -b main git config user.name "Bisect Demo" git config user.email "[email protected]" printf 'mode=fast\n' > app.conf git add app.conf git commit -m 'good: use fast mode' printf 'note=baseline\n' > notes.txt @northwind51 · 2026/7/29 02:01:59
找到 107 条结果