获得意外的OSError

时间:2017-11-04 03:03:54

标签: python python-3.x

我写了以下代码:

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。这太奇怪了!

1 个答案:

答案 0 :(得分:2)

您刚刚尝试打开名为e:\py<ASCII BACKSPACE>igger.py

的文件

\b转义码转换为ASCII退格符,因此您的文件加载当然有问题。这就是总是使用原始字符串用于Windows路径(和正则表达式)的原因,以避免在\在表示转义码的字符之前(例如r)时出现此陷阱,nuUxfvta,可能我忘记了其他一些人。使用字符串r"e:\py\bigger.py"作为您的文件(请注意前面的r在打开引号之前)将解决问题;在原始字符串中,唯一解释的转义是它们在引号字符本身之前;否则,反斜杠只是正常的字符,而不是逃避。