我遇到一個奇怪的問題,返回相同的錯誤,無論我使用的編碼。代碼運行良好,沒有Python 2.7.8中的編碼部分,但它在2.7.6中破解,這是我用於我所有開發的版本。字符串與Unicode編碼 - Struct()參數
import MIDI_PY2 as md
import glob
import ast
import os
dir = '/Users/user/Desktop/sample midis/'
os.chdir(dir)
file_list = []
for file in glob.glob('*.mid'):
file_list.append((dir + file))
dir = '/Users/user/Desktop/sample midis/'
os.chdir(dir)
file_list中返回此:
[u'/Users/user/Desktop/sample midis/M1.mid',
u'/Users/user/Desktop/sample midis/M2.mid',
u'/Users/user/Desktop/sample midis/M3.mid',
u'/Users/user/Desktop/sample midis/M4.mid']
md.concatenate_midis(file_list中, '/用戶/ luissanchez /桌面/溫度/ out.mid')返回此錯誤:
-
TypeError Traceback (most recent call last)
<ipython-input-73-2d7eef92f566> in <module>()
----> 1 md.concatenate_midis(file_list_1,'/Users/user/Desktop/temp/out.mid')
/Users/user/Desktop/sample midis/MIDI_PY2.pyc in concatenate_midis(paths, outPath)
/Users/user/Desktop/sample midis/MIDI_PY2.pyc in midi2score(midi)
/Users/user/Desktop/sample midis/MIDI_PY2.pyc in midi2opus(midi)
TypeError: Struct() argument 1 must be string, not unicode
那麼我修改代碼,所以第一個參數是字符串,而不是unicode:
file_list_1 = [str(x) for x in file_list]
返回:
['/Users/user/Desktop/sample midis/M1.mid',
'/Users/user/Desktop/sample midis/M2.mid',
'/Users/user/Desktop/sample midis/M3.mid',
'/Users/user/Desktop/sample midis/M4.mid']
運行功能concatenate_midis利用這最後名單(file_list_1)正好返回相同的錯誤:類型錯誤:結構()參數1必須是字符串,不是Unicode。
有人知道這裏發生了什麼嗎? concatenate_midi在Python 2.7.8中運行良好,但無法弄清楚它爲什麼不能在我使用的東西中工作,Enthought Canopy Python 2.7.6 | 64位
由於
struct.pack被修復爲接受Python 2.7.7中的unicode格式字符串。 請參閱:https://hg.python.org/cpython/raw-file/f89216059edf/Misc/NEWS 在問題的頂部,你說你在開發中使用2.7.7,但在底部你說2.7 0.6。我懷疑你實際使用2.7.6。 – phoenix 2015-05-19 14:07:20