Python2.7+MacOS运行图片缩放脚本报fsdecode属性错误的原因及解决
嘿,我来帮你搞定这个报错问题!
错误原因
你遇到的AttributeError: 'module' object has no attribute 'fsdecode',核心原因很明确:os.fsdecode()是Python 3.2及以上版本才新增的内置函数,而你当前使用的是Python2.7,这个版本的os模块里根本没有这个方法,所以脚本调用它时就会触发这个报错。
看你提供的脚本代码最后是image_dir = os.ge,应该是没粘贴完整,但从报错信息能推测,脚本里肯定存在调用os.fsdecode()的逻辑,这才触发了版本兼容问题。
解决办法
针对你的Python2.7+PIL1.1.7环境,有几个可行的解决方向:
手动实现兼容的fsdecode逻辑:在脚本开头添加一个兼容函数,替代Python3的
os.fsdecode,比如:import sys def fsdecode(path): if isinstance(path, unicode): return path return path.decode(sys.getfilesystemencoding())然后把脚本里所有
os.fsdecode()的调用换成这个自定义的fsdecode()函数即可。简化路径处理逻辑:如果脚本里用
os.fsdecode只是为了处理路径字符串,在Python2.7里直接使用原始字符串路径就行(只要你的路径没有特殊编码问题),直接删掉os.fsdecode的调用,改用原始路径变量。升级环境(推荐):Python2.7已经停止维护好几年了,PIL的后续分支Pillow对Python3的支持更完善、更稳定。如果你的环境允许,建议升级到Python3.x,然后安装
Pillow(执行pip install pillow),这样不仅能解决这个报错,还能避免很多其他版本兼容问题。
你提供的不完整脚本代码:
from __future__ import division from __future__ import print_function from __future__ import absolute_import import argparse import os from PIL import Image parser = argparse.ArgumentParser() parser.add_argument('--image_dir', help='Directory of images to resize') args = parser.parse_args() image_dir = os.ge
内容的提问来源于stack exchange,提问作者J A S K I E R

