我遇到一个奇怪的问题,返回相同的错误,无论我使用的编码。代码运行良好,没有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