shelve模塊讀寫文件報錯

来源:https://www.cnblogs.com/junglexj/archive/2020/06/30/13214708.html

import shelve a = shelve.open('1') b = [1,2,3] a['b'] = b a.close()a['b'] Traceback (most recent call last):File "C:\Users\Administrator\AppData\Local ...


import shelve

a = shelve.open('1')
b = [1,2,3]
a['b'] = b
a.close()

a['b']

Traceback (most recent call last):
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38-32\lib\shelve.py", line 111, in __getitem__
value = self.cache[key]
KeyError: 'b'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38-32\lib\shelve.py", line 113, in __getitem__
f = BytesIO(self.dict[key.encode(self.keyencoding)])
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38-32\lib\shelve.py", line 70, in closed
raise ValueError('invalid operation on closed shelf')
ValueError: invalid operation on closed shelf

原因是a.close()就已經關閉了shelf文件。

1 >>> shelve.open('1')['b']
2 [1,2,3]
3 >>> shelve.close()
4 Traceback (most recent call last):
5   File "<stdin>", line 1, in <module>
6 AttributeError: module 'shelve' has no attribute 'close'

 shelve模塊沒有close(),需要變數來關閉。

那如果沒有關閉會怎樣?

 1 >>> b
 2 [1, 2, 3]
 3 >>> c = shelve.open('5') 
 4 >>> c['b'] = b
 5 >>> c['b']
 6 [1, 2, 3]  #創建並打開文件5
 7 >>> d = shelve.open('6')
 8 >>> d['b'] = [4,5,6]
 9 >>> d['b']
10 [4, 5, 6]  #創建並打開文件6
11 >>> b
12 [1, 2, 3]
13 >>> c['b']
14 [1, 2, 3]
15 >>> d.close()
16 >>> d['b']  #關閉文件
17 Traceback (most recent call last):
18   File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38-32\lib\shelve.py", line 111, in __getitem__
19     value = self.cache[key]
20 KeyError: 'b'
21 
22 During handling of the above exception, another exception occurred:
23 
24 Traceback (most recent call last):
25   File "<stdin>", line 1, in <module>
26   File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38-32\lib\shelve.py", line 113, in __getitem__
27     f = BytesIO(self.dict[key.encode(self.keyencoding)])
28   File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38-32\lib\shelve.py", line 70, in closed
29     raise ValueError('invalid operation on closed shelf')
30 ValueError: invalid operation on closed shelf
31 >>> c['b']
32 [1, 2, 3]

從上面代碼可以看出shelve模塊的close()是分別針對每個文件的,會一直處於打開狀態直到關閉。

1 >>> list(c.values())
2 [[1, 2, 3]]
3 >>> list(c.keys())
4 ['b']
5 >>> list(c)
6 ['b']

shelf值預設返回值為keys()方法的返回值。


您的分享是我們最大的動力!

更多相關文章
  • 查找--插值查找(Java) 博客說明 文章所涉及的資料來自互聯網整理和個人總結,意在於個人學習和經驗彙總,如有什麼地方侵權,請聯繫本人刪除,謝謝! 介紹 插值查找演算法類似於二分查找,不同的是插值查找每次從自適應mid處開始查找。 自適應 計算自適應mid int mid = left + (rig ...
  • 前言 編程語言是開發的基礎。有不同的類型和特征,並且開發人員針對不同的場景選擇正確的語言,但是您知道使用哪種語言嗎?中國和世界各地有多少開發人員正在使用它?他們的排名是多少?快來看看您知道多少個列表! 今天,我們為所有人提供了這些著名的編程語言列表的清單!他們不僅教您最常用的語言,還教您等待發現,來 ...
  • from typing import Listclass Solution: # 錯誤的思路,會超時。 def maxProfit1(self, prices: List[int]) -> int: if len(prices) <= 1:return 0 # 小於等於一天沒法交易買和賣 # 進行雙 ...
  • 見了鬼! 工資竟然又跌了 #平均工資 2020年6月全國招收程式員313739人。2020年6月全國程式員平均工資14404元,工資中位數12500元,其中95%的人的工資介於5250元到35000元。 雖然收入又下降了,但是崗位比上個月多了起來,隨著經濟好轉,收入還是會漲回去的。大家要有信心。 # ...
  • 學了一段時間java,接觸了mvc設計模式,但是對設計模式概念比較模糊,通過百度瞭解了一下.這裡簡單總結一下. 設計模式(Design pattern),百度說是也叫軟體設計模式,是一套被反覆使用,多數人知曉的,經過分類編目的,代碼設計經驗的總結. 使用設計模式是為了可重用代碼,讓代碼更容易被他人理 ...
  • from typing import Listclass Solution: def minimumTotal1(self, triangle: List[List[int]]) -> int: return self.dfs(triangle,0,0,len(triangle),0) # 深搜的做 ...
  • 作為一個潛入IT圈五年之久、看過數萬份簡歷的HR,在這個問題上還是有點發言權的。HR在篩選簡歷時主要從公司需求出發,重點不一,不過還是有很多“通用”的套路,為了在30秒內判斷出這份簡歷是否值得跟進,我認為程式員寫簡歷的正確姿勢是這樣的: 一、基本格調 即打開簡歷之後的第一印象。就好比我們看見一個人, ...
  • Object A =new Object();java中new一個對象要經歷哪些過程首先java在new一個對象的時候,會先查看對象所屬的類有沒有被載入到記憶體,如果沒有的話就會先通過類的全限定名將對象所屬的.class文件載入到記憶體中。載入並初始化類完成後,再進行對象的創建工作。(全限定名有絕對路徑 ...
一周排行
  • C#6.0新特性 C#7.0新特性 C#8.0新特性 ...
  • out變數 可以直接在方法中使用out申明變數 int.TryParse("123", out var result); 元組 元組的申明 var alphaBetaStart = (alpha: "a", beta: "b"); Console.WriteLine($"{alphaBetaStar ...
  • 在我們的項目中,通常會把數據存儲到關係型資料庫中,比如Oracle,SQL Server,Mysql等,但是關係型資料庫對於併發的支持並不是很強大,這樣就會造成系統的性能不佳,而且存儲的數據多為結構化數據,對於非結構數據(比如文本)和半結構化數據(比如JSon) 就顯得不夠靈活,而非關係型資料庫則很 ...
  • 這幾天終於弄懂了async和await的模式,也搞明白了一直在心裡面積壓著的許多問題,所以寫一篇博客來和大家分享一下。 關於非同步機制我認為只要記住的以下幾點,就可以弄明白了: 1.我認為async和awwait兩個修飾符中最關鍵的是await,async是由於方法中包含await修飾符之後才在方法定 ...
  • 實現WCF的步驟如下: 設計服務協議 實現服務協議 配置服務 托管服務 生成客戶端(這步可有可無) 設計或定義服務協議要麼使用介面,要麼使用類。建議介面,使用介面好處一堆例如修改介面的實現,但是服務協定有無需改變。 設計服務協議,介面上使用 ServiceContractAttribute ,方法上 ...
  • 什麼鬼,我的CPF快寫好了,你居然也要搞跨平臺UI框架?什麼Maui? 之前怎麼不早說要搞跨平臺UI框架呢?看到谷歌搞flutter眼紅了?明年年底發佈?又搞這種追別人屁股的爛事情。 什麼MVU模式?模仿Dart?用C#代碼直接寫UI的模式和我的CPF很像啊。 當初我考慮過XML,Json來描述UI ...
  • 寫在前面 Docker作為開源的應用容器引擎,可以讓我們很輕鬆的構建一個輕量級、易移植的容器,通過Docker方式進行持續交付、測試和部署,都是極為方便的,並且對於我們開發來說,最直觀的優點還是解決了日常開發中的環境配置與部署環境配置上的差異所帶來的種種疑難雜症,從此推脫產品的措辭也少了——“我電腦 ...
  • 一、前言 回顧:認證授權方案之授權初識 從上一節中,我們在對授權系統已經有了初步的認識和使用,可以發現,asp.net core為我們提供的授權策略是一個非常強大豐富且靈活的認證授權方案,能夠滿足大部分的授權場景。 在ConfigureServices中配置服務:將授權服務添加到容器 public ...
  • 項目背景: 工作之餘兼職一家公司(方向是工業4.0)給做IM系統,主要功能包括:文字、 圖片、文件傳輸、遠程協助、視頻語音等等。這些功能都是基於群會話, 比如工廠操作工人遇到問題,請求遠程專家,這個初級專家不能解決問題,會邀請一個高級專家進來解決。開發過程中主要遇到的問題是視頻和語音這一塊,像其他的... ...
  • 基礎概念 Microsoft中間語言(MSIL),也成為通用中間語言(CIL),是一組與平臺無關的指令,由特定於語言的編譯器從源代碼生成。MSIL是獨立於平臺的,因此,他可以在任何公共語言基礎架構支持特定的環境上執行。 通過JIT編譯器將MSIL轉換為特定電腦環境的特定機器代碼。這是在執行MSIL ...