我遇到了一个奇怪的问题,无论我使用什么编码,它都会返回相同的错误。该代码运行良好,没有 Python 2.7.8 中的编码部分,但它在 2.7.6 中中断,这是我用于所有开发的版本。
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,'/Users/luissanchez/Desktop/temp/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']
使用最后一个列表 (file_list_1) 运行 concatenate_midis 函数会返回完全相同的错误: TypeError: Struct() argument 1 must be string, not unicode。
有人知道这是怎么回事吗? concatenate_midi 在 python 2.7.8 中运行良好,但无法弄清楚为什么它在我使用的内容中不起作用,Enthought Canopy Python 2.7.6 | 64 位
谢谢
最佳答案
错误
error: TypeError: Struct() argument 1 must be string, not unicode.
通常是由 struct.unpack() 引起的在旧版本的 python 中,函数需要字符串参数而不是 unicode。检查 struct.unpack() 参数是否是字符串而不是 unicode。
关于python-2.7 - 字符串与 unicode 编码 - Struct() 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26008272/