string vs unicode encoding - Struct()参数

时间:2014-09-24 03:56:25

标签: python-2.7 encoding character-encoding enthought

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

由于

2 个答案:

答案 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'>

检查您的代码是否包含该声明。