python只读模式_Python“shelve”只读模式不起作用

在Python中,尝试以只读模式使用shelve模块打开并修改数据时,发现即使设置了flag='r'和writeback=False,仍然能够修改shelve对象。这与文档和某些资源中提到的情况不一致,不会引发预期的异常。该问题可能与dbm在不同系统上的实现有关,因为在Python 3.6.7及更低版本以及MacOS上,代码按预期在只读模式下引发错误。而在Ubuntu 18.04的Python 3.7.2版本中,情况有所不同,扩展名为.db的文件会报错,且未扩展名的文件在只读模式下无法正常工作。
摘要由CSDN通过智能技术生成

^{}只读模式是否中断?文档中说flag参数的工作原理与^{}中所述的一样,所以我想如果我在读模式下打开,我就不能更改shelve对象。在

页面here似乎还建议修改以只读方式打开的搁置对象应该引发异常。但我仍能做到以下几点:Python 3.7.2 (default, Dec 29 2018, 06:19:36)

[GCC 7.3.0] :: Anaconda, Inc. on linux

Type "help", "copyright", "credits" or "license" for more information.

>>> import shelve

>>> with shelve.open('testdata') as shelf:

... shelf['two'] = 2222

... shelf['one'] = 1111

...

接下来我将用flag='r'和writeback=False来打开它。但我可以修改对象。在

^{pr2}$

只是为了确认一下,再次打开并打印出来,显示对象确实发生了变化:>>> with shelve.open('testdata', flag='r', writeback=False) as shelf:

... for k, v in shelf.items():

... print('Key: ', k, ' Value: ', v)

...

Key: one Value: 2222

Key: two Value: 1111

我错过了什么?这是否与dbm在不同系统上的选择/实现有关?在链接页上运行代码也不会导致:ERROR: cannot add item to database,正如页面所说的那样。在

-

更新:链接页面中的代码按预期工作,即引发和错误,当使用早期版本的Python时,即:Python 3.6.7 (default, Oct 22 2018, 11:32:17)

[GCC 8.2.0] on linux

Type "help", "copyright", "credits" or "license" for more information.

以及在MacOS上:Python 3.6.5 |Anaconda, Inc.| (default, Apr 26 2018, 08:42:37)

[GCC 4.2.1 Compatible Clang 4.0.1 (tags/RELEASE_401/final)] on darwin

Type "help", "copyright", "credits" or "license" for more information.

在Ubuntu18.04上的3.7.2版本中,一切都崩溃了。如果文件名的扩展名为“.db”,它将给出:dbm.error: db type is dbm.gnu, but the module is not available

如果没有扩展,只读模式就不能工作。在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值