Skip to main content
 首页 » 编程设计

python之谷歌应用引擎 : "Cannot create a file when that file already exists"

2024年08月12日36unruledboy

我在 Windows 7 上运行 Google App Engine devserver 1.3.3。

通常,这个方法可以正常工作,但是这次却报错了:

def _deleteType(type): 
    results = type.all().fetch(1000) 
    while results: 
        db.delete(results) 
        results = type.all().fetch(1000) 

错误:

  File "src\modelutils.py", line 38, in _deleteType 
    db.delete(results) 
  File "C:\Program Files\Google\google_appengine\google\appengine\ext\db\__init__.py", line 1302, in delete 
    datastore.Delete(keys, rpc=rpc) 
  File "C:\Program Files\Google\google_appengine\google\appengine\api\datastore.py", line 386, in Delete 
    'datastore_v3', 'Delete', req, datastore_pb.DeleteResponse(), rpc) 
  File "C:\Program Files\Google\google_appengine\google\appengine\api\datastore.py", line 186, in _MakeSyncCall 
    rpc.check_success() 
  File "C:\Program Files\Google\google_appengine\google\appengine\api\apiproxy_stub_map.py", line 474, in check_success 
    self.__rpc.CheckSuccess() 
  File "C:\Program Files\Google\google_appengine\google\appengine\api\apiproxy_rpc.py", line 149, in _WaitImpl 
    self.request, self.response) 
  File "C:\Program Files\Google\google_appengine\google\appengine\api\datastore_file_stub.py", line 667, in MakeSyncCall 
    response) 
  File "C:\Program Files\Google\google_appengine\google\appengine\api\apiproxy_stub.py", line 80, in MakeSyncCall 
    method(request, response) 
  File "C:\Program Files\Google\google_appengine\google\appengine\api\datastore_file_stub.py", line 775, in _Dynamic_Delete 
    self.__WriteDatastore() 
  File "C:\Program Files\Google\google_appengine\google\appengine\api\datastore_file_stub.py", line 610, in __WriteDatastore 
    self.__WritePickled(encoded, self.__datastore_file) 
  File "C:\Program Files\Google\google_appengine\google\appengine\api\datastore_file_stub.py", line 656, in __WritePickled 
    os.rename(tmpfile.name, filename) 
WindowsError: [Error 183] Cannot create a file when that file already exists 

我做错了什么?这次怎么会失败,但通常不会失败?

更新 我重新启动了开发服务器,当它重新联机时,数据存储区是空的。

请您参考如下方法:

不幸的是,1.3.3 太早了,我无法查看其来源并尝试准确诊断您的问题 - SDK 没有 1.3.3 发布标签,我无法猜测 datastore_filestub 的哪个版本.py 在 1.3.3 中。你能升级到当前版本,1.3.5,然后再试一次吗?不建议运行旧版本(特别是 2+ 版本),因为它们可能与 Google 实际服务器上实际可用的内容有点不同步,无论如何(和/或有在更高版本中修复的错误)。无论如何...

在 Windows 上,如果目标存在,os.rename 将不起作用——但我看到的修订非常小心地捕获了导致的 OSError( WindowsError 派生自它),删除现有文件,然后再次尝试重命名。所以我不知道什么可以解释你的错误——如果你运行的 SDK 的源代码有那么仔细的安排,我认为他们有。

另外,我建议使用 --use_sqlite(参见 Nick Johnson 的博客宣布它 here)代替 SDK 数据存储的文件 stub - 它似乎更有意义!-)