python服务器写法_python项目(服务器报错及处理方法)

Python是面向对象语言,所以程序抛出的异常也是类

(一)常见的Python异常有:

NameError 尝试访问一个没有申明的变量

SyntaxError 语法错误

IndexError 索引超出序列范围

KeyError 请求一个不存在的字典关键字

AttributeError     尝试访问未知的对象属性

ValueError 传给函数的参数类型不正确,比如给int()函数传入字符串形

UnboundLocalError  未绑定本地错误

(二)以下是我最近遇到的问题及解决方案:

①python局部/本地变量引用赋值问题

做项目时刷新网页服务器提示报错:UnboundLocalError: local variable 'user_sub' referenced before assignment

所以尝试测试出解决方案

服务器提示(UnboundLocalError:赋值前引用本地变量'user_sub')

def cart(request):

user_sub = 0 //修复时加上此句,给user_sub赋值即可解决

cartModel = CartModel.objects.all()

total = 0

for commodity in CartModel.objects.all():

total += commodity.count

total = int(total)

user_sub = CartModel.sub_list(commodity, CartModel.objects.all())

commodity.save()

return render(request, 'cart/cart.html', {'cartModel':cartModel, 'total':total, 'user_sub':user_sub})

刚开始我给user_sub加了一个global user_sub全局变量属性,随后服务器提示user_sub is not defind。

经正确改正后,我认为for循环中属于一个范围,有对user_sub进行赋值。但在外面看不到,相当于变量user_sub赋值前引用本地变量user_sub。

②服务器报错:AttributeError: 'int' object has no attribute 'save'(属性错误:'int'对象没有属性'保存)

根据服务器提示,我找到了报错行,该行功能计算商品价格

total += commodity.count

total = int(total)

count = commodity.count

price = commodity.price

commodity.money = count * price

commodity.save()

修改后发现原来是行未对齐,将末尾两行缩进对齐即可.

**注意**:这里提醒了python先后级与行对齐有关,有许多小问题也都是由于行对齐引发

③ValueError: invalid literal for int() with base 10: '可口可乐'

(意为值错误:int()的无效字面值为10:'可口可乐')

传给函数的参数类型不正确,比如给int()函数传入字符串形,正是我犯的错误

product_id = request.POST['id']  //这是我POST请求发送的id

//现在我检查输出下发现传过来的id是汉字,所以去改正POST发送数据即可

(这里要注意:id不能为汉字)

④引用JS文件问题

服务器报错:Uncaught ReferenceError: connect is not defined(未考虑参考错误:连接未定义)

这是引用文件问题,加上标头引入即可,模版页面键入

//因为$是在jquery.js中定义

⑤HTML模版页面计算报错

item.count是商品数量,优惠条件是买三赠一

模型中价格计算式为

def act_price(self):

self.tot_money = (self.count - int(self.count / 3)) * self.price

self.save()

赠送数量可在HTML页面计算

刚开始我写成

{% widthratio item.count 3 %}

运行后服务器报错:(TemplateSyntaxError("widthratio takes at least three arguments")

意思为TemplateSyntaxError(“widthratio至少需要三个参数”),所以加上参数1即可

正确写法为

{% widthratio item.count 3 1 %} //widthratio宽度比

(三)补充:Django模版算法

:{{ value|add:10}}

value=5,则返回15

:{{value|add:-10}}

value=5,则返回-5,减法就是加一个负数

:{%  widthratio 5 1 100 %}

(注意:该算法会四舍五入,不适合小数点运算)

表示5/1 *100,返回500,widthratio需要三个参数,它会使用 参数1/参数2*参数3,所以要进行乘法的话,就将参数2设为1即可

:{%  widthratio 5 100 1 %}

表示:5/100*1,返回0.05,只需要将第三个参数设置为1即可

(注意:参数个数不符合时,服务器会报错参数个数异常))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值