python常见报错

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()进行处理

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值