Python os.path.getsize/isfile/isdir运行异常如何解决
os.path系列方法调用失败调试方案
核心失败原因
- 相对路径基准不匹配:代码中给
os.path.getsize、os.path.isfile、os.path.isdir传入的是相对路径"students.txt",Python查找相对路径时以当前运行工作目录为基准,而非脚本文件所在目录。如果你启动脚本时的工作目录不是students.txt所在的文件夹,os模块无法定位目标文件,就会出现调用报错、返回False的问题。注意:os.path.abspath()不会校验文件是否真实存在,它只是单纯把相对路径拼接到当前工作目录后返回,哪怕文件不存在也能正常输出结果,不能用它的返回值判定文件是否存在。 - 权限不足:运行Python进程的系统账号没有目标文件、或目标文件所在目录的读取权限,调用
os.path.getsize()会直接抛出权限类错误。 - 文件名不匹配:常见于Windows系统默认隐藏文件后缀的场景,你看到的
students.txt实际文件名可能是students.txt.txt,或者文件名存在大小写、空格、特殊字符的拼写误差。
落地调试步骤
- 第一步先确认工作目录:在调用三个方法前加一行
print("当前Python工作目录:", os.getcwd()),打开打印出的目录,确认里面是否真的存在students.txt,90%的路径问题这一步就能定位。 - 统一传绝对路径:不要给三个方法传相对路径变量
filename,直接传已经生成的abs_file_path;如果要彻底规避工作目录的影响,直接以脚本自身所在目录为基准拼接文件路径,不管从哪个目录启动脚本都不会找错位置。 - 先做存在性校验再调用方法:加一层
os.path.exists(abs_file_path)判断,如果返回False直接打印找不到文件的提示,不要直接调用getsize触发无意义报错。 - 加异常捕获拿明确报错:把三个方法的调用包在try-except块里,直接打印异常类型和详情,不用盲目猜测错误原因。
修正后可运行代码
import os import os.path def main(): filename = "students.txt" # 以脚本自身所在目录为基准拼接文件路径,彻底解决相对路径匹配问题 script_dir = os.path.dirname(os.path.abspath(__file__)) abs_file_path = os.path.join(script_dir, filename) dir_name = os.path.dirname(abs_file_path) print() print() print("Absolute Path : ", abs_file_path) print("Directory : ", dir_name) print("Base Name : ", os.path.basename(abs_file_path)) print("Current Working Directory: ", os.getcwd()) try: # 统一传入绝对路径调用方法 print("File Size : ", os.path.getsize(abs_file_path)) print("Is A File? : ", os.path.isfile(abs_file_path)) print("Is A Directory? : ", os.path.isdir(abs_file_path)) except Exception as e: print(f"调用文件信息接口失败,错误类型:{type(e).__name__},错误详情:{str(e)}") print(f"请确认路径{abs_file_path}下是否存在目标文件,且当前运行账号有对应读取权限") if __name__ == '__main__': main()
额外避坑提示
- Windows系统不要手动写
\或者/拼接路径,统一用os.path.join()做路径拼接,自动适配不同系统的路径分隔符。 - 做文件类操作时,优先拿绝对路径传参,不要依赖相对路径,避免启动目录变化导致的路径查找失败。
内容的提问来源于stack exchange,提问作者Bad question asker
相关产品推荐
相关产品推荐

