写在前面:这是一个笔记本,仅供个人学习使用,由于篇幅较多,内容零散,未标注引用参考,如有侵权,请告知删除。
由于本人水平有限,错误在所难免,欢迎指正。
目录
- global name 'xxx' is not defined
- AttributeError: 'xxx' object has no attribute 'aaa'
- 复制 (= 、copy)
- No module named 'sklearn.datasets.samples_generator'
- TypeError: 'list' object is not callable
- TypeError: 'int' object is not iterable类型错误:
- 'tuple' object has no attribute 'extend'
- 未预期的符号 `(' 附近有语法错误
- python程序运行无报错且无输出
- SyntaxError: Non-ASCII character
- 计算两个三维向量夹角(弧度)
- ImportError: dynamic module does not define module export function (PyInit__moveit_roscpp_initializer)
- No module named 'pyrr'
global name ‘xxx’ is not defined
全局名称未定义
通常是没有导入对应的包、或者没有定义全局函数
如:
错误,在类中定义callback为局部函数,报错
class J2Model(object):
...
rospy.Subscriber('force', Int16, callback)
def callback(data):
AttributeError: ‘xxx’ object has no attribute ‘aaa’
AttributeError:‘xxx’对象没有属性’aaa’
1.可能是moudel没有存入本地文件夹
2.删除.pyc文件重新允许
3.例子
a.py
class Person(object): # 定义一个父类
def __init__(self):
print('1')
def talk(self): # 父类中的方法
Person().u()
print("person is talking....")
print(aaa)
def u(self):
self.aaa = 2
b.py
class Chinese(Person): # 定义一个子类, 继承Person类
def walk(self): # 在子类中定义其自身的方法
print('is walking...')
if __name__ == '__main__':
Chinese().walk()
Chinese().talk()
运行 b.py 即报错
AttributeError: ‘Chinese’ object has no attribute 'aaa
虽然在 u() 方法中定义了aaa,但是在main函数中并没有执行这个方法,即aaa是未定义的
可以将a.py修改, aaa改为全局变量
class Person(object): # 定义一个父类
def __init__(self):
print('1')
#self.aaa = 2
def talk(self): # 父类中的方法
Person().u()
print("person is talking....")
print(aaa)
def u(self):
global aaa
aaa = 2
如果不想把aaa定义为全局变量
b.py 中 chinese类继承了Person类,但Person类中的aaa变量,不是Person类的属性,在b.py 中定义Chinese类,不会初始化定义aaa,可以将aaa改为Person类的属性(如__init__函数里的注释),或者在主函数中先执行 u() 方法定义aaa
class Person(object): # 定义一个父类
def __init__(self):
print('1')
self.aaa = 2
复制 (= 、copy)
a =[1 ,2, 3]
b=a
则a、b指向同一个内存(数组[1 ,2, 3]),即为浅复制
例:
if __name__ == '__main__':
a = [ 1, 2,3]
b=a
print(b[0])
print(a)
print(b)
#a[0]=4
b[0]=5
print(a[0])
print(b[0])
结果:使用b=a,则a、b则指向同一个数组
1
[1, 2, 3]
[1, 2, 3]
5
5
若只想复制元素而非指向同一个内存:
- b=a[:]
a = [ 1, 2,3]
b=a[:]
- copy.deepcopy 是深度复制
import copy
a = [ 1, 2,3]
b = copy.deepcopy(a)
copy(a)是浅复制,同a=b
No module named ‘sklearn.datasets.samples_generator’
1.没有安装sklearn包
使用pip install -U scikit-learn
或者安装了anaconda后,使用conda install scikit-learn
2.老版本sklearn包里有sklearn.datasets.samples_generator这个module,在新版本,更改为了sklearn.datasets
版本0.24 已经更改
sklearn.__version__
Out[4]: '0.24.1'
参考链接:https://stackoverflow.com/questions/65898399/no-module-named-sklearn-datasets-samples-generator
TypeError: ‘list’ object is not callable
a=[[1,2,3],[3,4,5]]
print(a(0,0))
>>>TypeError: 'list' object is not callable
报错: TypeError: ‘list’ object is not callable
python列表、元组(tuple)的读取不采用(x,y),而采用[x][y]
a=[[1,2,3],[3,4,5]]
print(a[0][0])
>>>1
TypeError: ‘int’ object is not iterable类型错误:
原意为:类型错误,“int”对象不可迭代
通常是使用循环但指定错误,如:
for i in len(x) 错误
for i in range(len(x)) 正确
这里记写程序出现的一个由于列表导致的问题:
stop_flag=0
direction_flag=0
a=[]
for j in range(1,6):
stop_flag=j
direction_flag=j
state_flag=stop_flag*direction_flag
print(state_flag)
a.extend(state_flag)
print(a)
>>>a.extend(state_flag):TypeError: 'int' object is not iterable
a为一个列表,使用extend添加元素到a中,即使用了a.extend(state_flag)语句,这里犯了一个致命错误:x.extend(y)是添加一个列表y到x列表中,x更新成一个包含y中所有元素的新列表x(注意不同于append函数)
‘tuple’ object has no attribute ‘extend’
tuple(元组)的元素不能修改,如果想实现该功能,可先转换成列表:
b=list(a)
然后进行extend、append、insert等操作
元组和列表的异同
都是序列、都可以存储任何数据类型、可以通过索引访问([x][y])
///元组tuple:
1.元组中的元素值是不允许修改的,但我们可以对元组进行连接组合
2.元组中的元素值是不允许删除的,但我们可以使用del语句来删除整个元组
3.元组之间可以运算,可以使用 + 号和 * 号进行运算,运算后会生成一个新的元组。
4.使用()创建
///列表list:
1.元素可变,可以修改,增删元素(extend、append、insert)
2.使用[]创建
///字典(Dictionary):
1.字典的每个键值 key=>value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 中。
d = {key1 : value1, key2 : value2 }
使用键值索引。
2.不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会被记住。
3.可以增删修改元素。
未预期的符号 `(’ 附近有语法错误
或许是脚本开头没有加入释伴,
即#!/usr/bin/env python 或 #!/usr/bin/env python 3
也可使用python xxx.py执行脚本
python程序运行无报错且无输出
可能为
if __name__ == '__main__':
书写错误
SyntaxError: Non-ASCII character
ASCII报错,没有加编码注释
在python2中需要加编码注释# -*- coding: utf-8 -*-
或#coding=utf-8
python3无需
计算两个三维向量夹角(弧度)
计算两个三维向量夹角:
向量A与向量B的夹角为
θ
\theta
θ
则有
c
o
s
θ
=
(
A
,
B
)
/
(
∣
∣
A
∣
∣
∣
∣
B
∣
∣
)
cos\theta = (A ,B)/(||A|| ||B||)
cosθ=(A,B)/(∣∣A∣∣∣∣B∣∣)
python 实现
import math
import numpy as np
A=np.array([0,0,1])
B=np.array([0,0,-1])
norm_A = float(np.linalg.norm(A))#模长
norm_B = float(np.linalg.norm(B))
A=A/norm_A #使用模长将向量A、B归一化
B=B/norm_B
#再计算模长,这里其实都为1
norm_A = float(np.linalg.norm(A))#模长
norm_B = float(np.linalg.norm(B))
print(norm_A,norm_B)
#计算A在B上的投影,利用投影和归一化后的A计算夹角,这里的norm_B可省略,但为了更清楚的表现公式所以写上
projectionAonB=(1/norm_B)* (A[0]*B[0]+A[1]*B[1]+A[2]*B[2])
print(projectionAonB)
theta=math.acos(projectionAonB)
print(theta)
ImportError: dynamic module does not define module export function (PyInit__moveit_roscpp_initializer)
日志:
Traceback (most recent call last):
File "/home/xxx/catkin_ws/src/kinova-ros/kinova_demo/xxx/test1.py", line 6, in <module>
import moveit_commander
File "/home/xxx/ws_moveit/devel/lib/python2.7/dist-packages/moveit_commander/__init__.py", line 34, in <module>
exec(__fh.read())
File "<string>", line 2, in <module>
File "/home/xxx/ws_moveit/src/moveit/moveit_commander/src/moveit_commander/roscpp_initializer.py", line 35, in <module>
from moveit_ros_planning_interface import _moveit_roscpp_initializer
ImportError: dynamic module does not define module export function (PyInit__moveit_roscpp_initializer)
可能原因:使用了Python3的解释器运行Python2程序。
No module named ‘pyrr’
命令行中
pip install pyrr
#或者
pip3 install pyrr