Django报错ZeroDivisionError: division by zero
Django报错ZeroDivisionError: division by zero
DJango报错:up_rate = round(upline/total*100) ZeroDivisionError: division by zero
报错代码
#报错代码 def dashboard(request): total = models.Asset.objects.count() upline = models.Asset.objects.filter(status=0).count() offline = models.Asset.objects.filter(status=1).count() unknown = models.Asset.objects.filter(status=2).count() breakdown = models.Asset.objects.filter(status=3).count() backup = models.Asset.objects.filter(status=4).count() up_rate = round(upline/total*100) o_rate = round(offline/total*100) un_rate = round(unknown/total*100) bd_rate = round(breakdown/total*100) bu_rate = round(backup/total*100) server_number = models.Server.objects.count() networkdevice_number = models.NetworkDevice.objects.count() storagedevice_number = models.StorageDevice.objects.count() securitydevice_number = models.SecurityDevice.objects.count() software_number = models.Software.objects.count() return render(request, 'dashboard.html', locals())
错误分析
这个错误是因为分母 total 的值为零,导致除法运算出现了除以零的情况。你需要检查一下 total 的计算方式,确保它不会为零。如果 total 可能为零,你可以在代码中添加一些逻辑,以避免出现除以零的情况。例如,你可以在分母为零时返回一个默认值或者进行其他的处理。
解决问题
使用了一个三目运算符来判断 total 是否为零,并在分母为零时返回了一个默认值
解决示例代码
def dashboard(request): total = models.Asset.objects.count() upline = models.Asset.objects.filter(status=0).count() offline = models.Asset.objects.filter(status=1).count() unknown = models.Asset.objects.filter(status=2).count() breakdown = models.Asset.objects.filter(status=3).count() backup = models.Asset.objects.filter(status=4).count() up_rate = round(upline/total*100) if total != 0 else 0 o_rate = round(offline/total*100) if total != 0 else 0 un_rate = round(unknown/total*100) if total != 0 else 0 bd_rate = round(breakdown/total*100) if total != 0 else 0 bu_rate = round(backup/total*100) if total != 0 else 0 server_number = models.Server.objects.count() networkdevice_number = models.NetworkDevice.objects.count() storagedevice_number = models.StorageDevice.objects.count() securitydevice_number = models.SecurityDevice.objects.count() software_number = models.Software.objects.count() return render(request, 'dashboard.html', locals())
因为没有数据所以没有显示百分比,至此问题解决