繁体   English   中英

如何解决 Python 代码中的类型错误问题?

[英]How can I solve the Type Error issue in my python code?

def prepare_data(df, config, data_dir):
    X = np.empty(shape=(df.shape[0], config.dim[0], config.dim[1], 1))
    input_length = config.audio_length
    for i, fname in enumerate(df.index):
        file_path = data_dir + fname
        data, _ = librosa.core.load(file_path, sr=config.sampling_rate, res_type="kaiser_fast")

        # Random offset / Padding
        if len(data) > input_length:
            max_offset = len(data) - input_length
            offset = np.random.randint(max_offset)
            data = data[offset:(input_length+offset)]
        else:
            if input_length > len(data):
                max_offset = input_length - len(data)
                offset = np.random.randint(max_offset)
            else:
                offset = 0
            data = np.pad(data, (offset, input_length - len(data) - offset), "constant")

        data = librosa.feature.mfcc(data, sr=config.sampling_rate, n_mfcc=config.n_mfcc)
        data = np.expand_dims(data, axis=-1)
        X[i,] = data
    return X

我的根目录中有一个音频数据集,当我执行以下代码时,出现类型错误,但我不知道如何解决。 上面的代码用于从我的数据集中准备数据。 当我执行下面的代码时,类型错误正在发生:

X_train = prepare_data(train, config, 'datasets/train_curated/') 

以下错误描述如下:

TypeError                                 Traceback (most recent call last)
<ipython-input-38-3c6c017b85c7> in <module>
      1 get_ipython().run_line_magic('time', '')
----> 2 X_train = prepare_data(train, config, 'datasets/train_curated/')
      3 X_test = prepare_data(test, config, 'datasets/test/')
      4 y_train = to_categorical(train.label_idx.astype('str'), num_classes=config.n_classes)

<ipython-input-36-0cb95e99049e> in prepare_data(df, config, data_dir)
      4     for i, fname in enumerate(df.index):
      5 #       print(fname)
----> 6         file_path = data_dir + fname + '.wav'
      7         data, _ = librosa.core.load(file_path, sr=config.sampling_rate, res_type="kaiser_fast")
      8 

TypeError: can only concatenate str (not "int") to str

是的,因为您试图将字符串和整数连接为file_path = data_dir + fname + '.wav'但 fname 将是一个整数值,因此使用字符串对其进行类型转换。

for i, fname in enumerate(df.index):
    #print(fname)
    file_path = data_dir + str(fname) + '.wav'
    data, _ = librosa.core.load(file_path, sr=config.sampling_rate, res_type="kaiser_fast")

file_path = str(data_dir) + str(fname) + '.wav'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM