尽管代码正常工作,Python仍会抛出错误

时间:2014-01-29 08:33:02

标签: python shutil

我在Python中有一些代码如下:

folderPath = 'C:\Program Files (x86)\Program\folder/' + folderName
if not os.path.exists(folderPath):
    shutil.copytree('C:\Program Files (x86)\Program\folder\anotherfolder', folderPath)

变量folderName来自用户输入,基本上我的程序允许用户创建一个文件夹,然后另一个文件夹中的一些内容被复制到新文件夹中。您可以将其视为各种文件备份系统。

奇怪的是这个。它工作得很好,文件夹被创建(如shutil文档中所述),另一个文件夹的内容被复制,但是,引发了错误:

[error] script [ myScript ] stopped with error in line 52
[error] shutil.Error ( ['C:\\Program Files (x86)\\Program\\folder\\anotherfolder', 'C:\\Program 
Files (x86)\\Program\\folder\\test', "[Errno 5] Input/output error: 'C:\\\\Program Files 
(x86)\\\\Program\\\\folder\\\\test'"] )

在这种情况下,我输入的folderName是'test'。第52行是shutil.copytree()调用。

我的脚本然后停止运行,即使文件全部被复制并且它运行良好。

如何忽略这个(如果可能的话)并继续使用脚本?或者我如何解决这个问题,如果这可能确实是我的代码问题?

感谢所有帮助。

提前致谢。

2 个答案:

答案 0 :(得分:2)

进一步挖掘:

根据microsoft,errno 5对应于拒绝访问。

copytree使用copy2()复制文件,然后更改其权限次数。

恕我直言,您无权更改(或检索)文件属性,因此您可以使用自己拥有的任何属性(您的用户,组...)获取该文件。

HTH

答案 1 :(得分:1)

jython中的shutil存在问题,请参阅http://bugs.jython.org/issue1872

然而,这应该不是你的问题?

你的路径中有一个正斜杠(/),这可能不太好。为了使您的程序正常运行,请执行以下操作。

folderPath = 'C:\Program Files (x86)\Program\folder/' + folderName
if not os.path.exists(folderPath):
    try:
        shutil.copytree('C:\Program Files (x86)\Program\folder\anotherfolder', folderPath)
    except Exception, exc:
        print exc

这将捕获引发的错误。如果它再次发生,您应该能够获得有关错误的更详细信息。

你也可以使用:

folderPath = 'C:\Program Files (x86)\Program\folder/' + folderName
if not os.path.exists(folderPath):
    try:
        shutil.copytree('C:\Program Files (x86)\Program\folder\anotherfolder', folderPath)
    except Exception:
        import traceback
        traceback.print_exc()

编辑:请注意您的问题仍然存在!异常/错误在except子句中捕获,因此程序不会崩溃。请参阅评论和Laur Ivan的回答。发生此错误的原因是您没有在Program Files目录中执行某些操作的访问权限。

我希望这会有所帮助。问候Xeun