list (修改列表的索引值)
循環一個列表時,最好不要對原列表有改變大小的操作,這樣會影響你的最終結果。
#使用負索引進行修改列表
print('First')
lis = [11, 22, 33, 44, 55]
print(lis)
for num in range(len(lis)-1,-1,-1):
if num % 2 != 0:
lis.pop(num)
else:
print(lis)
#使用步長進行修改列表
print('Second')
lis = [11, 22, 33, 44, 55]
print(lis)
del lis[1::2]
print(lis)
#添加新的列表進行修改
print('Third')
lis = [11, 22, 33, 44, 55]
print(lis)
new_lis = list()
for num in range(len(lis)):
if num % 2 == 0:
new_lis.append(lis[num])
else:
lis = new_lis
print(lis)
dict
在循環中不可以改變字典的鍵值對(增加、刪除)
RuntimeError: dictionary changed size during iteration
dict.fromkeys()
dic = {'k1': 'v1', 'k2': 'v2', 'name': 'alex'}
錯誤的示范
for key in dic:
if 'k' in key:
dic.pop(key)
print(dic)
修改字典的內容需要把修改的鍵加入到空列表然后遍歷修改字典的值
l1 = list()
for key in dic:
if 'k' in key:
l1.append(key)
print(l1)
for key in l1:
dic.pop(key)
print(dic)
ValueError: unknown locale: UTF-8
File "/Users/wyl/Documents/effectmatrix/program/minetest/MCEdit-Unified-master/ENV/lib/python2.7/locale.py", line 545, in getdefaultlocale
return _parse_localename(localename)
File "/Users/wyl/Documents/effectmatrix/program/minetest/MCEdit-Unified-master/ENV/lib/python2.7/locale.py", line 477, in _parse_localename
raise ValueError, 'unknown locale: %s' % localename
ValueError: unknown locale: UTF-8
解決方法:
1.在.bash_profile文件中加入
export LANG="en_US.UTF-8"
export LC_COLLATE="en_US.UTF-8"
export LC_CTYPE="en_US.UTF-8"
export LC_MESSAGES="en_US.UTF-8"
export LC_MONETARY="en_US.UTF-8"
export LC_NUMERIC="en_US.UTF-8"
export LC_TIME="en_US.UTF-8"
2.source 使用更新后的內容
source .bash_profile
測試
python -c 'import locale; print(locale.getdefaultlocale());'
異常處理
異常名稱 |
描述 |
BaseException |
所有異常的基類 |
SystemExit |
解釋器請求退出 |
KeyboardInterrupt |
用戶中斷執行(通常是輸入^C) |
Exception |
常規錯誤的基類 |
StopIteration |
迭代器沒有更多的值 |
GeneratorExit |
生成器(generator)發生異常來通知退出 |
StandardError |
所有的內建標准異常的基類 |
ArithmeticError |
所有數值計算錯誤的基類 |
FloatingPointError |
浮點計算錯誤 |
OverflowError |
數值運算超出最大限制 |
ZeroDivisionError |
除(或取模)零 (所有數據類型) |
AssertionError |
斷言語句失敗 |
AttributeError |
對象沒有這個屬性 |
EOFError |
沒有內建輸入,到達EOF 標記 |
EnvironmentError |
操作系統錯誤的基類 |
IOError |
輸入/輸出操作失敗 |
OSError |
操作系統錯誤 |
WindowsError |
系統調用失敗 |
ImportError |
導入模塊/對象失敗 |
LookupError |
無效數據查詢的基類 |
IndexError |
序列中沒有此索引(index) |
KeyError |
映射中沒有這個鍵 |
MemoryError |
內存溢出錯誤(對於Python 解釋器不是致命的) |
NameError |
未聲明/初始化對象 (沒有屬性) |
UnboundLocalError |
訪問未初始化的本地變量 |
ReferenceError |
弱引用(Weak reference)試圖訪問已經垃圾回收了的對象 |
RuntimeError |
一般的運行時錯誤 |
NotImplementedError |
尚未實現的方法 |
SyntaxError |
Python 語法錯誤 |
IndentationError |
縮進錯誤 |
TabError |
Tab 和空格混用 |
SystemError |
一般的解釋器系統錯誤 |
TypeError |
對類型無效的操作 |
ValueError |
傳入無效的參數 |
UnicodeError |
Unicode 相關的錯誤 |
UnicodeDecodeError |
Unicode 解碼時的錯誤 |
UnicodeEncodeError |
Unicode 編碼時錯誤 |
UnicodeTranslateError |
Unicode 轉換時錯誤 |
Warning |
警告的基類 |
DeprecationWarning |
關於被棄用的特征的警告 |
FutureWarning |
關於構造將來語義會有改變的警告 |
OverflowWarning |
舊的關於自動提升為長整型(long)的警告 |
PendingDeprecationWarning |
關於特性將會被廢棄的警告 |
RuntimeWarning |
可疑的運行時行為(runtime behavior)的警告 |
SyntaxWarning |
可疑的語法的警告 |
UserWarning |
用戶代碼生成的警告 |
序列化注意事項:
- json: 傳入傳出為字符串
- 文件打開使用'r'模式
- 只能寫一行
- 只支持字典
json.dumps(data,sort_keys=True,indent=2,separators=(',',':'),ensure_ascii=False)
#sort_keys 排序
#indent 縮進
#separators 分隔符
#ensure_ascii 支持中文
- pickle:傳入傳出為bytes類型
- 文件打開使用'rb'模式
- 支持任意類型
print(pickle.loads(b'\x80\x03}q\x00X\x01\x00\x00\x001q\x01K\x04s.'))
#字符串的格式為'bytes',不是需要'encode()'
- shelve:打開文件的參數增加'writeback=True'防止寫入失敗
- 支持字典
import shelve
f = shelve.open('c',writeback=True)
#創建文件
#writeback = True 回寫