python常见报错
1. Python使用eval强制转换字符串为list时报错:File “”, line 1, in NameError: name ‘nan’ is not defined
解决办法:
globals = {
'nan': ""
}
x = eval(x, globals)
2.公司data_create()函数上传数据报错
错误:
File "/Users/zhonghua/.pyenv/versions/3.9.7/lib/python3.9/json/decoder.py", line 355, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 82 (char 81)
问题所在:
有些个字段为string,例如[“dq1”,“dq2”]你以为是list,实则在转换为json时,它仍旧按照string类型处理了,所以会报错,一定打印下字段类型
3.解决TypeError: string indices must be integers, not str
错误原因:
json格式导致的错误,python无法直接识别
解决办法:
原来字典存储的对象是json,因此需要把json反解码后才可以读取。用json.loads(),把json格式转换为python识别的格式。
补充:python json 模块的dumps、dump、loads、load的使用
json.dumps():编码,将python对象格式化为json字符(将dict转换为str)
json.loads():解码,将json字符串解码成python对象(将str转换为dict)
eg:
data = {
'hobby': {'years': 4, 'count': 3},
'location': 'China'
}
json_str = json.dumps(data) # 编码为json格式
new_data = json.loads(json_str) # 解码为python数据
print(json_str)
print(type(data))
print(type(json_str))
print(new_data)
print(type(new_data))
结果:
{"hobby": {"years": 4, "count": 3}, "location": "China"}
<class 'dict'>
<class 'str'>
{'hobby': {'years': 4, 'count': 3}, 'location': 'China'}
<class 'dict'>
json.dump():主要用来将python对象写入json文件
eg:
data = {
'hobby': {'years': 4, 'count': 3},
'location': 'China'
}
json_str = json.dumps(data) # 编码为json格式
f=open('/Users/zhonghua/Documents/Project/collector/demo.json','w',encoding='utf-8')
json.dump(json_str,f)
f.close()
结果:
json.load():加载json格式文件,返回python对象
eg:
f=open('/Users/zhonghua/Documents/Project/collector/demo.json','r',encoding='utf-8')
data = json.load(f)
print(data,type(data))
f.close()
结果:
{"hobby": {"years": 4, "count": 3}, "location": "China"} <class 'str'>
4.解决A value is trying to be set on a copy of a slice from a DataFrame.Try using.loc[row_indexer,col_indexer] = value instead
解决办法:向列表中增加一列时,需要先将变量复制一份,再添加才可以
test_data = {
"name": ["小红", "小蓝"],
"age": [5, 6]
}
df = pd.DataFrame(test_data)
df = df.copy()
df["height"] = [80, 100]
print(df)
结果:
name age height
0 小红 5 80
1 小蓝 6 100
5. 使用pandas写excel时,报错openpyxl.utils.exceptions.IllegalCharacterError
解决办法:
import xlsxwriter
outputData.to_excel(outputExcelFilePath, engine='xlsxwriter')
6. 运行项目报错:OSError[Errno 48]:Address already in use
解决办法:杀掉占用端口的程序
第一步:lsof -i:8000
找到pid 为2345
第二步:kill -9 2345
7.linux ssh 远程登录报错:WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED
出错原因:.ssh/known_hosts
文件是记录远程登录主机的公钥的文件,服务器重装系统,而保存的公钥是还未重装的系统的系统公钥,在ssh链接的时候首先会验证公钥,如果公钥不对,就会报错
解决办法:
方法1: 将known_hosts文件中登录错误的ip的公钥删除,重新链接即可
方法2:使用shh-keygen命令:比如我们要将172.16.113.69公钥信息删除,使用命令ssh-keygen -R 172.16.113.69
8. UnicodeEncodeError: ‘latin-1’ codec can’t encode characters in position 8-10: Body (‘严杨路’) is not valid Latin-1. Use body.encode(‘utf-8’) if you want to send it encoded in UTF-8.
出错原因:要请求的报文中包含有中文字符或者其他字符导致编码格式不支持,汉字无法Unicode编码
解决办法: 将请求体的编码格式改为’utf-8’
url = "https://jmkfw.pudong.sh:8081/jmk/house/floor/info"
payload = '严杨路'
bytedatas = payload.encode('UTF-8')
print(payload)
headers = {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
'token': token
}
response = requests.request("POST", url, headers=headers, data=bytedatas,verify=False)
9.requests.exceptions.SSLError: HTTPSConnectionPool(host=‘jmkfw.pudong.sh’, port=8081): Max retries exceeded with url: /jmk/house/info (Caused by SSLError(SSLCertVerificationError(1, ‘[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1123)’)))
解决办法:
加一个 verify 参数为False
response = requests.request("POST", url, headers=headers, data=payload,verify=False)
10. redis.exceptions.DataError: Invalid input of type: ‘list’. Convert to a byte, string or number first
出错原因:列表数据没有序列化
解决办法:将数据用json.dumps(),json.loads()进行处理