# 数据增强-【TypeError: Invalid with type】错误

用户在数据增强时会定义Python function来实现自定义的数据增强，其中在操作输入数据时必须要了解输入数据的类型才能实现正确的数据增强。

**1. 尝试定义Python function实现裁剪图片四个角和中间**

脚本如下：

![](figures/1-20.png)

在py\_transform基本上再调用自定义的数据增强，脚本如下：

![](figures/2-21.png)

**2. 报错如下**

![](figures/3-22.png)

**3. 原因分析**

实际上报错信息中可以一步步定位出具体错误所在位置:1.PNG

![](figures/4-23.png)

1.  错误发生位置在Map操作时传入的pyFunc，即自定义的Python数据增强函数。

![](figures/5-24.png)

2. 查看Python的函数调用栈，错误发生在corp\_4\_corner\_1\_center 函数调用的np.concatenate函数中。

![](figures/6-25.png)

3. 查看numpy.concatenate函数的API，如下：

```
numpy.concatenate((a1, a2, ...), axis=0, out=None, dtype=None, casting="same_kind")
```

其中a1, a2均为numpy.array，除了在axis指示的维度，其他维度的shape必须一致。

可以得出报错原因为函数的函数为PIL.Image对象，与期望的Numpy array不符合。

**4. 解决方法**

![](figures/7-26.png)

在np.concatenate函数前，将PIL.Image对象转为Numpy array。

**5. 总结**

1. 遇到报错时，阅读报错日志以及错误堆栈信息可以帮忙定位问题。

2. 调用第3方函数时，需要了解期望的入参的数据类型，不符合时需要做合适的转换。

