我写了以下代码:
def bigger(a,b):
if a>b:
return a
else:
return b
print(bigger(1,3))
我将代码保存为名为greater.py的文件。
然后我使用Python解释器(Python 3.6)中的以下代码执行该文件:
exec(open('e:\py\bigger.py').read())
Python返回以下错误消息:
>>> exec(open('e:\py\bigger.py').read())
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
OSError: [Errno 22] Invalid argument: 'e:Vipy\x08igger.py'
如您所见,它表示文件名为x08igger.py
,而我在代码中输入的内容为bigger.py
。这太奇怪了!
答案 0 :(得分:2)
您刚刚尝试打开名为e:\py<ASCII BACKSPACE>igger.py
\b
转义码转换为ASCII退格符,因此您的文件加载当然有问题。这就是总是使用原始字符串用于Windows路径(和正则表达式)的原因,以避免在\
在表示转义码的字符之前(例如r
)时出现此陷阱,n
,u
,U
,x
,f
,v
,t
,a
,可能我忘记了其他一些人。使用字符串r"e:\py\bigger.py"
作为您的文件(请注意前面的r
在打开引号之前)将解决问题;在原始字符串中,唯一解释的转义是它们在引号字符本身之前;否则,反斜杠只是正常的字符,而不是逃避。