以上报错通常出现在对文件的读取时。下面,代码演示该错误出现的几种情况。
with open('C:\Users\Administrator\Desktop\hello.txt','r',encoding='utf-8') as f:
content = f.read()
print(content)
#运行结果:
#SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: #truncated \UXXXXXXXX escape
#Process finished with exit code 1
#在此例中,Windows环境下,在桌面任意建立了一个文本文档,名称任意
#下面将该文件拷贝至c盘符根目录下,在运行无报错。
with open('C:\user1\bdmin\hello.txt','r',encoding='utf-8') as f:
content = f.read()
print(content)
#建立该路径后,仍然报错,原因为在Windows系统下右斜杠和转义字符\是相同的,
#windows无法知道哪个是路径表示,哪个是真实的转义字符。该问题通常出现在多级目录中
with open('C:\tahello.txt','r',encoding='utf-8') as f:
content = f.read()
print(content)
#文件改为t开始后也会报错,如果文件开始不是a或者t开始,不会报错
如何避免这样的错误?三种方式。
第一种:表示路径的字符串前添加 字母 r,表示所写路径没有转义,就是原生字符。
第二种:路径分隔使用左斜杠
第三种:路径表示使用双右斜杠
下面使用代码简单演示:
with open('C:\\tahello.txt','r',encoding='utf-8') as f:
content = f.read()
print(content)
#双右斜杠,转义在转义,Windows是使用右斜杠表示路径
with open('C:/tahello.txt','r',encoding='utf-8') as f:
content = f.read()
print(content)
#Linux的路径表示方法,左斜杠
with open(r'C:\tahello.txt','r',encoding='utf-8') as f:
content = f.read()
print(content)
#r强制去除转义,这时写哪类斜杠都可以
总结:
在Windows下推荐写任何路径的时候都使用\\双右斜杠这样的写法,其一可以表明这是一个在Windows下写的路径,其二,避免路径读取错误后报错
在Linux下,推荐使用字母 r加路径,路径分隔使用左斜杠。