OSError: [Errno 22] Invalid argument问题解决
问题描述
在做SSD目标检测算法的时候,在predict.py文件中遇到了这么一个报错的问题。
// ERROR
Traceback (most recent call last):
File "D:/ssd-keras-fromCSDN-Parathyoid/predict.py", line 7, in <module>
image = Image.open("C:\Users\qw\Desktop\000000.jpg")
File "D:\anaconda\envs\py37\lib\site-packages\PIL\Image.py", line 2809, in open
fp = builtins.open(filename, "rb")
OSError: [Errno 22] Invalid argument: '\u202aC:\\Users\\qw\\Desktop\\000000.jpg'
是由于在读取 C:\Users\qw\Desktop\000000.jpg文件时候出现了错误,最终读取出的文件地址变成了
\u202aC:\Users\qw\Desktop\000000.jpg
很明显是多出来了一个 \u202a 这样一个符号,并且将盘符下的分割符居然也改变了,非常神奇的错误!!惊了!!!
解决方法
第一种方法:修改代码
将
image = Image.open("C:\Users\qw\Desktop\000000.jpg")
修改成
image = Image.open(r"C:\Users\qw\Desktop\000000.jpg")
r"file":意思是指为了避免\xx是一个转义字符而导致的错误,也就是说加上r之后,“”里的就不再出现转义字符,编程纯的文件地址。
当然这样的错误还有一种解决方法,但不太建议使用,因为不一定能解决实质问题。
将
image = Image.open("C:\Users\qw\Desktop\000000.jpg")
修改成
image = Image.open("C://Users/qw/Desktop/000000.jpg")
也就是把\改成/,把:\改成://。 我的经验是有时候管用,有时候就不管用了,比较玄学。至于原因,我还不太明白。
第二种方法:手动输入 按照pycharm编程时候的提醒写下去的代码 一定保熟!!!
相当于已经能够找到文件了
像这样修改完全不会有问题,亲测可用。
那么问题出在哪了?
一般我们找文件保存地址的时候,都是右击属性里面找。比如
正好就是在 Ctrl+C Ctrl+V的时候出了问题。
在这里直接复制粘贴就会出现
OSError: [Errno 22] Invalid argument: '\u202aC:\\Users\\qw\\Desktop\\000000.jpg'
就会在C:\前出现一串 \u202a,导致找不到文件
这恰恰就是因为在属性里复制文件地址得来的
这符号在文件地址显示的时候并不会显示,所以在右键属性 以及 Pycharm代码里 的时候看到的依旧是C:\Users\qw\Desktop\000000.jpg
但是在pycharm编程的代码运行时,可以理解为多了一个隐含符 \u202a
\u202a的含义是left to right,也就是说读取的顺序是从左往右读取。也就和每个人的电脑盘符一样,从C:/一次向更深层的根目录读取。
总结
所以说,好技术不如多动手
只要动手,亲手敲代码,就不会有这个问题了
Ctrl+C Ctrl+V也不是万能药水,有时候有毒啊
如果有问题欢迎指正!!!