fix(data): 校验早于副作用,补空行;经验写入 pitfalls
save_table 的两处收尾(用户授权代改): - 后缀校验原先藏在 if/else 分支的 else 里,排在 path.parent.mkdir(...) 之后, 传 sub/x.txt 会先把 sub\ 建出来再抛 ValueError。改成守卫子句,集中在 mkdir 之前, 校验段结束后才产生副作用;此时 else 分支自然消失,用回 if/else 两路分派 - __all__ 与下一个 def 之间补回第二个空行(PEP 8 / E302) 测试: - 新增 test_save_table_validates_before_touching_disk, 断言参数非法时 tmp_path 下一个条目都不留(ValueError 与 TypeError 两条路径) - 40 passed / 44 skipped,两套环境一致;ruff All checks passed 文档: - docs/dev/personal-pitfalls.md 追加条目 5(参数校验排在副作用之后) 与条目 6(把 lint 的"没报错"当成"没问题"),索引表同步加行 - STATUS:io.py 收尾,L0 第 3 项完成;测试计数 40 - CHANGELOG:Fixed 段补两条
This commit is contained in:
1 parent
19f4a15107
commit
6758e81c9d
5 files changed
+61
-9
No files matched your search
@@ -14,6 +14,7 @@ import pandas as pd
|
||||
|
||||
__all__ = ["load_table", "save_table"]
|
||||
|
||||
|
||||
def load_table(path: str | Path, **kwargs: Any) -> pd.DataFrame:
|
||||
"""按扩展名自动选择读取方式,返回 DataFrame。
|
||||
|
||||
@@ -100,12 +101,14 @@ def save_table(df: pd.DataFrame, path: str | Path, index: bool = False, **kwargs
|
||||
if not isinstance(df,pd.DataFrame):
|
||||
raise TypeError(f"df 必须是一个pandas DataFrame,但是你上传了{type(df)}")
|
||||
|
||||
# 校验必须排在副作用(建目录)之前:否则传个 .txt 会先建出一个空目录再抛错。
|
||||
if suffix not in ('.csv','.xlsx','.xls'):
|
||||
raise ValueError(f"不支持的文件后缀:{suffix}")
|
||||
|
||||
path.parent.mkdir(parents=True,exist_ok=True)
|
||||
|
||||
if suffix == '.csv':
|
||||
df.to_csv(path,index=index,**kwargs)
|
||||
elif suffix in ['.xlsx','.xls']:
|
||||
df.to_excel(path,index=index,**kwargs)
|
||||
else:
|
||||
raise ValueError(f"不支持的文件后缀:{suffix}")
|
||||
df.to_excel(path,index=index,**kwargs)
|
||||
return path
|
||||
Reference in new issue
Block a user