python错误集锦

基础语法错误

一、

TypeError: ‘range’ object doesn’t support item deletion

原因:

python3中range不返回数组对象,而是返回range对象。

修改:

将dataIndex = range(col);替换为dataIndex= list(range(50));

二、

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

原因:

用 == 号判断二者元素是否完全相等,会返回一个包含True,False的数组

    if position == pos:
        cc = np.fft.irfft(R / np.abs(R), n=(interp * n))

修改:

使用all或者any,all表示全部相等时返回True,any表示存在一个数相等时返回True

    all(position == pos)
    any(position == pos)

三、

ValueError: operands could not be broadcast together with shapes (35,) (965,)

原因:

进行矩阵运算时两个矩阵的大小不匹配,无法进行运算

修改:

首先判断两个矩阵是否是因为前面代码的错误导致大小不对,如果是,则修改前面的代码,否则,按需要更改矩阵大小,使其能够进行需要的计算。

四、

TypeError: ufunc ‘bitwise_xor’ not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ‘‘safe’’

原因:

进行指数运算时使用了符号,而在python中表示xor。

for i in range(6):
	R[0,i] = math.sqrt(MIC_POSITON[i,0]^2+MIC_POSITON[i,1]^2+MIC_POSITON[i,2]^2)

修改:

将^改为**

for i in range(6):
	R[0,i] = math.sqrt(MIC_POSITON[i,0]**2+MIC_POSITON[i,1]**2+MIC_POSITON[i,2]**2)

五、

ValueError: X should be a square kernel matrix

原因:

仅当传递表示样本的成对相似性的(n_samples, n_samples)数据矩阵而不是传统的(n_samples, n_features)矩形数据矩阵时,才能使用kernel=‘precomputed’

修改:

从参数空间中删除’precomputed’

六、

ValueError: Found input variables with inconsistent numbers of samples: [1762, 50]

原因:

输入参数变量与样本数不一致:[1762, 50],

修改:

改变参数变量和样本数,使两者长度一致

七、

TypeError: list indices must be integers or slices, not str

原因:

进行列表索引的时候给了列表一个字符型的数据。

修改:

将字符型的列表索引改为整型。

八、

DeprecationWarning: “@coroutine” decorator is deprecated since Python 3.8, use “async def” instead
def hello():

原因:

用asyncio提供的@asyncio.coroutine可以把一个generator标记为coroutine类型,然后在coroutine内部用yield from调用另一个coroutine实现异步操作。
但是从Python 3.5开始引入了新的语法async和await,可以让coroutine的代码更简洁易读(抛弃了@asyncio.coroutine)。

@asyncio.coroutine
def hello():
    print('%s: hello, world!' % threading.current_thread())
    # 休眠不会阻塞主线程因为使用了异步I/O操作
    # 注意有yield from才会等待休眠操作执行完成
    yield from asyncio.sleep(2)
    # asyncio.sleep(1)
    # time.sleep(1)
    print('%s: goodbye, world!' % threading.current_thread())

修改:

1.把@asyncio.coroutine替换为async;
2.把yield from替换为await。

async def hello():
    print('%s: hello, world!' % threading.current_thread())
    # 休眠不会阻塞主线程因为使用了异步I/O操作
    # 注意有yield from才会等待休眠操作执行完成
    await asyncio.sleep(2)
    # asyncio.sleep(1)
    # time.sleep(1)
    print('%s: goodbye, world!' % threading.current_thread())

opencv

一、

cv2.error: OpenCV(4.5.3) C:\Users\runneradmin\AppData\Local\Temp\pip-req-build-u4kjpz2z\opencv\modules\core\src\arithm.cpp:650
上述错误可能有以下几种情况

  1. 图片名错误
  • 检查图片路径是否输入错误
  • 检测图片是否存在中文路径
    如果读入图片出现中文路径,运行会报错,而写入图片有中文路径不会报错,但存储图片名称会乱码。
    修改方式:
    读:
import cv2
image = cv2.imdecode(np.fromfile('中文图片.png'), cv2.IMREAD_UNCHANGED)

写:

cv2.imencode('.png', image)[1].tofile('保存_中文图片.png')
  1. 图片计算时大小不等

当代码中存在图片的加减运算,并且图片大小不一致时会报错
修改:
根据需要修改图片大小,使用cv2.resize()函数。

二、

cv2.error: OpenCV(4.5.3) c:\users\runneradmin\appdata\local\temp\pip-req-build-u4kjpz2z\opencv\modules\imgproc\src\color.simd_helpers.hpp:92: error: (-2:Unspecified error) in function ‘__cdecl cv::impl::anonymous-namespace'::CvtHelperanonymous namespace’::Set<3,4,-1>,struct cv::impl::A0x5888afd4::Set<3,4,-1>,struct cv::impl::A0x5888afd4::Set<0,2,5>,2>::CvtHelper(const class cv::_InputArray &,const class cv::_OutputArray &,int)’
Invalid number of channels in input image:
‘VScn::contains(scn)’
where
‘scn’ is 2

原因:

显示的np矩阵是两通道的,不符合图片显示格式
修改:
出现两通道的矩阵大概率是原理性错误,需要找到矩阵生成的位置,进行修改。

三、

ValueError: setting an array element with a sequence.

原因:

1,数组拼接的时候行或者列个数不对齐
2,数据类型不一致
修改:
1,对于拼接不对齐的问题,指定行拼接或者列拼接:axis =0(行拼接,1为列拼接)

res1 = np.concatenate([A, b], axis=0)

2,对于类型不对的问题,统一数据类型,在拼接前就数据类型统一成完全一样的

result = ori.astype(float)

你可能感兴趣的:(python学习,python,opencv)