我遇到一个奇怪的问题,无论我使用什么编码,都会返回相同的错误。代码运行良好,没有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()参数1必须是字符串,而不是unicode。
有人知道这里发生了什么吗? concatenate_midi在python 2.7.8中运行良好,但无法弄清楚为什么它在我使用的东西中不起作用,Enthought Canopy Python 2.7.6 | 64位
由于
答案 0 :(得分:2)
错误
错误:TypeError:Struct()参数1必须是字符串,而不是unicode。
通常由struct.unpack()函数引起,在早期版本的python中需要字符串参数而不是unicode。检查struct.unpack()参数是字符串而不是unicodes。
答案 1 :(得分:1)
一个可能的原因是from __future__ ..
statement。
>>> type('a')
<type 'str'>
>>> from __future__ import unicode_literals
>>> type('a')
<type 'unicode'>
检查您的代码是否包含该声明。