python编程中遇到的错误类型,原因及解决方法


一、TypeError
1.   user_t = username + time      #将username和time拼接在一起
     TypeError: must be str, not float
原因:time获取到的time.time()当前时间戳为float类型,float不能直接跟字符串进行拼接
解决方法:将time转换成字符串,即str(time)
2. TypeError: 'dict' object is not callable
The view function did not return a valid response. The return type must be a string, tuple, Response instance, or WSGI callable, but it was a dict.
原因:接口return了字典类型的数据
      res_msg = {'username':username,'login_info':user_value}
                print('res_msg:',res_msg)
            return res_msg
解决方法:使用json.dump()将字典转成json串,return json.dumps(res_msg,ensure_ascii=False)

说明:接口返回类型只能是一个string或者元组

2.    stu_info = res.get(stu_info)
TypeError: unhashable type: 'dict'



二、NameError
1.NameError: name 'time' is not defined
原因:
1)没有使用函数中的形参,函数中的形参是login_time

2)没有引入time模块

2.File "F:/lp_test/besttest/auto_test/homework/syz_automatic_code/day7/day7_homework/day7_hw_1_modify_excel.py", line 67, in add_col_isgratudate
    old_sheet = open_excel( file_path )  # 调用打开excel的函数
NameError: name 'file_path' is not defined

原因:

定义函数时的位置参数写成file_name,如右所示: [  def add_col_isgratudate(file_name): ]但实际使用的是file_path

解决方法:把file_name改为file_path

三、AttributeError

1.AttributeError: 'NoneType' object has no attribute 'encode'

原因:没有判断输入的参数是否为空,就进行了md5加密
      pwd = db_operater_tools.my_md5(flask.request.values.get('passwd').strip()) 
解决方法:

      先判断密码非空后再加密

四、语法错误
1. File "F:/lp_test/besttest/auto_test/homework/syz_automatic_code/day7/day7_homework/bin/start_sever.py", line 5
    host = '0.0.0.0',       ^
SyntaxError: invalid syntax
原因:run方法的run与()中间加了=号,如下所示:
day7_hw_modify_reg_interface.server.run =(
    host = '0.0.0.0',
    port = SERVER_PORT,
    debug = True
)
解决方法:把=号去掉,如果设置正确host,port,debug都是橘红色

2.File "F:\lp_test\besttest\auto_test\homework\syz_automatic_code\day7\day7_homework\lib\db_operater_tools.py", line 14
    if r.keys(k1:k)[0].decode()==key_com:        ^
SyntaxError: invalid syntax
原因:if r.keys(k1:k)[0].decode()==key_com:  不能写成k1:k

解决方法:提前把k1和k拼接成字符串即用key_com(接收k1 + ':' + k)替换k1:k

五、列表越界
1.    if r.keys(key_com)[0].decode() == key_com:   #表示用户
IndexError: list index out of range
原因:用户名还没有插入的时候r.keys()返回的是空的list,所以获取不到[0]的数值

解决方法:将if r.keys(key_com)[0].decode() == key_com: 改为 if r.keys(key_com) 列表空表示没有检索到

六、UnboundLocalError

1.File"F:\lp_test\besttest\auto_test\homework\syz_automatic_code\day7\day7_homework\lib\day7_hw_modify_reg_interface.py", line 78, in login
    return json.dumps(res_msg,ensure_ascii=False,indent=1)   #缩进为1
UnboundLocalError: local variable 'res_msg' referenced before assignment

原因:判断条件if redis_username == username and redis_passwd == pwd:没有配对的else 输出res_msg ={}
导致if条件为假时,没有了res_msg参数,所以导致以上错误

解决方法:增加配对的else: res_msg = {'',''}

七、ImportError

Traceback (most recent call last):
  File "start.py", line 1, in <module>
    from libs import interface

ImportError: cannot import name 'interface'

原因:因为项目目录不再环境变量中了

解决方法:手动加环境变量

os.path.dirname(os.path.dirname(__file__)) 使用此方法添加环境变量,运行错误,原因__file__获取文件路径分隔符错误
解决方法:转成绝对路径os.path.abspath(__file__)

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值