解决TypeError: as_view() takes exactly 1 argument (3 given)

本文解析了Django Rest Framework中因ViewSet继承错误导致的TypeError问题,并给出了正确的继承类实例。
    urlpatterns = router.urls
  File "/usr/local/lib/python2.7/site-packages/djangorestframework-3.3.3-py2.7.egg/rest_framework/routers.py", line 79, in urls
    self._urls = self.get_urls()
  File "/usr/local/lib/python2.7/site-packages/djangorestframework-3.3.3-py2.7.egg/rest_framework/routers.py", line 256, in get_urls
    view = viewset.as_view(mapping, **route.initkwargs)
TypeError: as_view() takes exactly 1 argument (3 given)

此错误是因为使用的Djangorestframework框架,router里注册的ViewSet类,继承的类错误导致的

from rest_framework.generics import GenericAPIView
from rest_framework import viewsets
class KViewSet(GenericAPIView)  # 错误
class KViewSet(viewsets.GenericViewSet)  # 正确
train: weights=yolov5s.pt, cfg=, data=data/bvn.yaml, hyp=data/hyps/hyp.scratch.yaml, epochs=300, batch_size=16, imgsz=640, rect=False, resume=False, nosave=False, noval=False, noautoanchor=False, evolve=None, bucket=, cache=None, image_weights=False, device=, multi_scale=False, single_cls=False, adam=False, sync_bn=False, workers=8, project=runs/train, name=exp, exist_ok=False, quad=False, linear_lr=False, label_smoothing=0.0, patience=100, freeze=0, save_period=-1, local_rank=-1, entity=None, upload_dataset=False, bbox_interval=-1, artifact_alias=latest github: skipping check (not a git repository), for updates see https://github.com/ultralytics/yolov5 YOLOv5 🚀 2021-10-12 torch 2.4.1+cu121 CUDA:0 (NVIDIA GeForce RTX 4060 Laptop GPU, 7915.4375MB) hyperparameters: lr0=0.01, lrf=0.1, momentum=0.937, weight_decay=0.0005, warmup_epochs=3.0, warmup_momentum=0.8, warmup_bias_lr=0.1, box=0.05, cls=0.5, cls_pw=1.0, obj=1.0, obj_pw=1.0, iou_t=0.2, anchor_t=4.0, fl_gamma=0.0, hsv_h=0.015, hsv_s=0.7, hsv_v=0.4, degrees=0.0, translate=0.1, scale=0.5, shear=0.0, perspective=0.0, flipud=0.0, fliplr=0.5, mosaic=1.0, mixup=0.0, copy_paste=0.0 Weights & Biases: run &#39;pip install wandb&#39; to automatically track and visualize YOLOv5 🚀 runs (RECOMMENDED) TensorBoard: Start with &#39;tensorboard --logdir runs/train&#39;, view at http://localhost:6006/ /home/wsy/yolov5/train.py:116: FutureWarning: You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `torch.serialization.add_safe_globals`. We recommend you start setting `weights_only=True` for any use case where you don&#39;t have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature. ckpt = torch.load(weights, map_location=device) # load checkpoint Overriding model.yaml nc=80 with nc=2 from n params module arguments 0 -1 1 3520 models.common.Conv [3, 32, 6, 2, 2] 1 -1 1 18560 models.common.Conv [32, 64, 3, 2] 2 -1 1 18816 models.common.C3 [64, 64, 1] 3 -1 1 73984 models.common.Conv [64, 128, 3, 2] 4 -1 2 115712 models.common.C3 [128, 128, 2] 5 -1 1 295424 models.common.Conv [128, 256, 3, 2] 6 -1 3 625152 models.common.C3 [256, 256, 3] 7 -1 1 1180672 models.common.Conv [256, 512, 3, 2] 8 -1 1 1182720 models.common.C3 [512, 512, 1] 9 -1 1 656896 models.common.SPPF [512, 512, 5] 10 -1 1 131584 models.common.Conv [512, 256, 1, 1] 11 -1 1 0 torch.nn.modules.upsampling.Upsample [None, 2, &#39;nearest&#39;] 12 [-1, 6] 1 0 models.common.Concat [1] 13 -1 1 361984 models.common.C3 [512, 256, 1, False] 14 -1 1 33024 models.common.Conv [256, 128, 1, 1] 15 -1 1 0 torch.nn.modules.upsampling.Upsample [None, 2, &#39;nearest&#39;] 16 [-1, 4] 1 0 models.common.Concat [1] 17 -1 1 90880 models.common.C3 [256, 128, 1, False] 18 -1 1 147712 models.common.Conv [128, 128, 3, 2] 19 [-1, 14] 1 0 models.common.Concat [1] 20 -1 1 296448 models.common.C3 [256, 256, 1, False] 21 -1 1 590336 models.common.Conv [256, 256, 3, 2] 22 [-1, 10] 1 0 models.common.Concat [1] 23 -1 1 1182720 models.common.C3 [512, 512, 1, False] 24 [17, 20, 23] 1 18879 models.yolo.Detect [2, [[10, 13, 16, 30, 33, 23], [30, 61, 62, 45, 59, 119], [116, 90, 156, 198, 373, 326]], [128, 256, 512]] /home/wsy/anaconda3/envs/pytorch1.6/lib/python3.8/site-packages/torch/functional.py:513: UserWarning: torch.meshgrid: in an upcoming release, it will be required to pass the indexing argument. (Triggered internally at ../aten/src/ATen/native/TensorShape.cpp:3609.) return _VF.meshgrid(tensors, **kwargs) # type: ignore[attr-defined] Model Summary: 270 layers, 7025023 parameters, 7025023 gradients, 16.0 GFLOPs Transferred 343/349 items from yolov5s.pt Scaled weight_decay = 0.0005 optimizer: SGD with parameter groups 57 weight, 60 weight (no decay), 60 bias train: Scanning &#39;datasets/labels/train.cache&#39; images and labels... 31 found, 0 missing, 0 empty, 0 corrupted: 100%|█ val: Scanning &#39;datasets/labels/val.cache&#39; images and labels... 5 found, 0 missing, 0 empty, 0 corrupted: 100%|█| 5/5 Plotting labels... autoanchor: Analyzing anchors... anchors/target = 3.81, Best Possible Recall (BPR) = 1.0000 /home/wsy/yolov5/train.py:262: FutureWarning: `torch.cuda.amp.GradScaler(args...)` is deprecated. Please use `torch.amp.GradScaler(&#39;cuda&#39;, args...)` instead. scaler = amp.GradScaler(enabled=cuda) Image sizes 640 train, 640 val Using 8 dataloader workers Logging results to runs/train/exp11 Starting training for 300 epochs... Epoch gpu_mem box obj cls labels img_size 0%| | 0/2 [00:00<?, ?it/s] Traceback (most recent call last): File "/home/wsy/yolov5/train.py", line 620, in <module> main(opt) File "/home/wsy/yolov5/train.py", line 517, in main train(opt.hyp, opt, device, callbacks) File "/home/wsy/yolov5/train.py", line 298, in train accumulate = max(1, np.int64(ni, xi, [1, nbs / batch_size]).round()) TypeError: function takes at most 1 argument (3 given)如何解决
08-17
#!/bin/env python # 必须写在第一行 # -*- coding: utf-8 -*- ################################################# # Author: songwenhua # Function:客户Y形阻抗线设计检查 # Date: 2025-10-28 # v1.00 songwenhua 用户需求号: 2481 任务ID:2099 # LOAD_MODE__ import os import re import sys from py39COM import Gateway, InCAM from py39Tools import TableWidget from ICO import ICO from ICNET import ICNET from XMLParse import XMLParsePlus from messageBox import messageBox from EqHelper import EqHelper from PyQt5.QtWidgets import QWidget, QApplication, QComboBox from collections import defaultdict, Counter from functools import partial import math # from img import apprcc_rc from pprint import pprint import time class chk_Y_zkline: def __init__(self): # self.setWindowFlags(Qt.WindowStaysOnTopHint) self.JOB = os.environ.get(&#39;JOB&#39;, None) self.STEP = os.environ.get(&#39;STEP&#39;, None) # self.chklist = os.environ.get(&#39;chklist&#39;, None) # --启动pycharm.sh时,里面有export INCAM_DEBUG=yes设置此环境变量 INCAM_DEBUG = os.getenv(&#39;INCAM_DEBUG&#39;, None) # 接口定义 if INCAM_DEBUG == &#39;yes&#39;: # 通过genesis gateway命令连结pid进行会话,不用在genesis环境下运行,直接用gateway的方式,可在pycharm环境下直接debug self.incam = Gateway() # 方法genesis_connect通过查询log-genesis文件获取的料号名 self.JOB = self.incam.job_name self.STEP = self.incam.step_name self.pid = self.incam.pid else: self.incam = InCAM() self.pid = os.getpid() self.ico = ICO(incam=self.incam) self.icNet = ICNET(incam=self.incam) self.jobName = self.ico.SimplifyJobName(jobName=self.JOB) self.dbSite = self.ico.GetDBSite(JOB=self.JOB) self.SITE = self.ico.GetSite(JOB=self.JOB) self.getinfomation_dict = defaultdict(defaultdict) self.ballPadIndexList = defaultdict(list) self.layerMatrix = self.ico.GetLayerMatrix() self.zkLineIndex = defaultdict(defaultdict) self.step_list = self.ico.GetStepList() layer_list = self.ico.GetLayerList() self.zk_siglay = {} self.zkLayerList = self.getZKLayer() # 获取阻抗线层别 self.run() def getZKLayer(self): """ 获取阻抗线层别 :return: 阻抗线层别 """ zkLayerList = list() layerList = self.layerMatrix[&#39;allLay&#39;] # self.ico.GetLayerList() for lay in layerList: for t in (&#39;s&#39;, &#39;ss&#39;, &#39;gsg&#39;, &#39;gssg&#39;): pattern_tmp = re.compile(r&#39;^((?:un-)?(\d+|[tb])zk)-(\d+\.?\d*)-(%s)-?(\d+\.?\d*)?-?(\d+\.?\d*)?-?(\d+\.?\d*)?$&#39; % t)#存在un开头的阻抗层 matchObj = re.match(pattern_tmp, lay) if matchObj: matchList = matchObj.groups() zkLayerList.append(lay) self.getinfomation_dict[lay][&#39;layer&#39;] = matchList[0] print(zkLayerList) if len(zkLayerList) > 0: SignalLayer_list = self.layerMatrix[&#39;sigAllLay&#39;] for i in range(len(SignalLayer_list)): if i == 0: self.zk_siglay[&#39;tzk&#39;] = SignalLayer_list[0] elif i == (len(SignalLayer_list) - 1): self.zk_siglay[&#39;bzk&#39;] = SignalLayer_list[-1] else: self.zk_siglay[str(i + 1) + &#39;zk&#39;] = SignalLayer_list[i] self.zk_siglay[&#39;un-&#39; + str(i + 1) + &#39;zk&#39;] = SignalLayer_list[i]#还要加一个un-开头的对应线路层! print("zk_siglay : %s" % self.zk_siglay) for lay in self.getinfomation_dict.keys(): for key in self.zk_siglay: if self.getinfomation_dict[lay][&#39;layer&#39;] == key: self.getinfomation_dict[lay][&#39;sigLayerNum&#39;] = str(SignalLayer_list.index(self.zk_siglay[key]) + 1) self.getinfomation_dict[lay][&#39;sigLayerName&#39;] = str(self.zk_siglay[key]) break else: messageBox.showMessage(message=&#39;没有识别到阻抗线层别,请规范命名(eg:tzk-gssg-100)&#39;, bitmap=&#39;critical&#39;) exit() return zkLayerList def find_overlapping_line_endpoints(features): """找出所有被3个及以上线段共享的端点坐标 Args: features: 线段特征列表,每个元素包含&#39;type&#39;和坐标信息 Returns: dict: { (x,y): [line_index1, line_index2...] } """ # 创建坐标字典 {坐标: [线段索引列表]} endpoint_dict = defaultdict(list) for idx, feature in enumerate(features): if feature[&#39;type&#39;] == &#39;line&#39;: # 获取所有线段端点坐标 start_point = (feature[&#39;xs&#39;], feature[&#39;ys&#39;]) end_point = (feature[&#39;xe&#39;], feature[&#39;ye&#39;]) # 记录每个端点对应的线段索引 endpoint_dict[start_point].append(idx) endpoint_dict[end_point].append(idx) return {k:v for k,v in endpoint_dict.items() if len(v) >= 3}# 筛选出重合数≥3的坐标点 # overlapping_points = {} # for point, lines in endpoint_dict.items(): # if len(lines) >= 3: # overlapping_points[point] = lines # return overlapping_points def selectBallPad(self, zkLay, x, y): """ 判断指定坐标点是否与背面ball pad导通 :param zkLay: 阻抗层名称 :param x: 检查点的x坐标 :param y: 检查点的y坐标 :return: bool 是否导通 """ # 阻抗层对应的线路层 zk2SigLay = self.getinfomation_dict[zkLay][&#39;sigLayerName&#39;]#self.getinfomation_dict得到的是原始阻抗层,而不是_bak备份阻抗层 sigBot = self.layerMatrix[&#39;sigAllLay&#39;][-1] # 设置工作环境 self.ico.ClearAll() self.ico.ResetFilter() self.incam.COM(f&#39;affected_layer, name={sigBot}, mode=single, affected=yes&#39;) self.incam.COM(f&#39;display_layer, name={zk2SigLay}, display=yes&#39;) self.incam.COM(f&#39;work_layer, name={zk2SigLay}&#39;) # 执行选择 self.incam.COM("sel_clear_feat") self.incam.COM("clear_highlight") self.incam.COM(f&#39;sel_board_net_feat, operation=select, x={x}, y={y}, tol=1, use_ffilter=no&#39;) # 获取选中特征 featureFullInfo_sigBot = self.ico.GetFeatureFullInfo(step=self.STEP, layer=sigBot, mode=&#39;select&#39;) # 检查背面ball pad # 对于背面sig选到的物体,做个筛选,如果是pad且是.smd属性,说明选到了ball pad selectPadList = [info for info in featureFullInfo_sigBot if info[&#39;type&#39;] == &#39;pad&#39; and (info[&#39;attr&#39;] == &#39;.smd&#39; or info[&#39;attr&#39;] == &#39;.smd,.bga&#39; or info[&#39;attr&#39;] == &#39;.smd,.lga&#39; or info[&#39;attr&#39;] == &#39;.smd,.smt_pad&#39; or info[&#39;attr&#39;] == &#39;.smd,.test_pad&#39;)] # 20241209 新增ball pad属性是.smd.bga和.smd.lga return len(selectPadList) > 0 # 如果找到ball pad则返回True def run(self): """ 主执行函数 """ ##################################### # 初始化并调用 job = self.JOB backup_layers = [] self.ico.ClearAll() # self.zkLineIndex = defaultdict(defaultdict) #备份阻抗层 for zklay in self.zkLayerList: zkLay_bak = f&#39;{zklay}_bak&#39; # self.zkLineIndex[zklay][&#39;zkLaybak&#39;] = zkLay_bak # self.zkLineIndex[zklay][&#39;index&#39;] = [] self.ico.DelLayer(layer_list=[zkLay_bak]) # 创建前先删除 # 删除辅助层 self.ico.DispWork(zklay) self.incam.COM(f&#39;sel_copy_other, dest = layer_name, target_layer ={zkLay_bak},invert = no,dx = 0 ,dy = 0,size= 0,x_anchor= 0,y_anchor = 0&#39;) # 复制 # self.ico.DispWork(zkLay_bak) backup_layers.append(zkLay_bak) self.ico.ClearLayer() for step in self.step_list: for backup_layer in backup_layers: zkLay1 = backup_layer.replace(&#39;_bak&#39;,&#39;&#39;) #原始阻抗层 self.ico.DispWork(job=self.JOB, stp=step, lay=backup_layer) #对所有备份层的进行线简化 self.incam.COM("rv_tab_empty,report=design2rout_rep,is_empty=yes") self.incam.COM("sel_design2rout,det_tol=25.4,con_tol=25.4,rad_tol=2.54") self.incam.COM("rv_tab_view_results_enabled,report=design2rout_rep,is_enabled=yes,serial_num=-1,all_count=-1") self.ico.ClearLayer() features = self.ico.GetFeaturesPro(job, step, backup_layer) overlapping = self.find_overlapping_line_endpoints(features) # 检查重合点,并判断原稿中与重合坐标touch的阻抗线是否与背面的ball pad导通 if overlapping: for point, line_indices in overlapping.items(): # print(f"坐标 {point} 被 {len(line_indices)} 条线段共享:") #选中当前层的所有重合线段 for idx in line_indices: #遍历所有共享当前坐标点的线段索引 line = features[idx] #根据索引从特征列表中获取完整的线段数据 # 检查起点是否导通 start_conduction = self.selectBallPad( zkLay=backup_layer, #zkLay1 #用已经线简化了的备份层还是原始阻抗层?? x=line[&#39;xs&#39;], y=line[&#39;ys&#39;] ) # 检查终点是否导通 end_conduction = self.selectBallPad( zkLay=backup_layer, #zkLay1 x=line[&#39;xe&#39;], y=line[&#39;ye&#39;] ) if start_conduction or end_conduction: # print(f"线段 {idx} 在点({line[&#39;xs&#39;]},{line[&#39;ys&#39;]})({line[&#39;xe&#39;]},{line[&#39;ye&#39;]})与背面ball pad导通") messageBox.showDialog(title=&#39;提示&#39;, text=f&#39;{backup_layer}存在Y形阻抗线,此阻抗线与背面ball pad导通。1、人为确认是否为分流设计 2、如为分流设计,需与客户确认是否设计异常,与客户EQ此组对抗通过测量科邦卡控阻值,如客户不同意,内部策划列难点评估测科邦&#39;, bitmap=&#39;warning&#39;, buttons=[&#39;OK&#39;], defaultButton=&#39;OK&#39;) else: # print(f"线段 {idx} 未检测到与背面ball pad的导通") self.ico.DispWork(job=self.JOB, stp=step, lay=backup_layer) #备份层阻抗线路删除与重合坐标touch的整根线路 # 删除重合点touch的整根线段,那么这里是line[&#39;xs&#39;]还是重合点的xs呢? self.incam.COM(f"sel_polyline_feat,operation=select,x={line[&#39;xs&#39;]},y={line[&#39;ys&#39;]}")# self.incam.COM("sel_delete") return 0 #不存在3个以上重合点,直接退出 sys.exit() if __name__ == "__main__": app = QApplication(sys.argv) analyzer = chk_Y_zkline() 针对以上代码,我希望实现需求目标:‌ 在run函数中实现阻抗线路的自动清理,删除与背面pad未导通且存在多余连接点的冗余线路。 ‌详细流程:‌ ‌备份处理‌ 复制所有阻抗层,备份层名称添加"_bak"后缀 所有后续操作仅在备份层上进行 ‌线路预处理‌ 对备份层执行线简化操作(已有函数实现) 提取所有line元素的端点坐标,通过GetFeaturesPro函数筛选&#39;line&#39;属性获取 ‌重合坐标分析‌ 统计所有端点坐标,精度保留6位小数(.6f) 识别出现次数≥3的重合坐标点 ‌导通性验证‌ 对每个重合坐标点,检查原稿层中与该坐标touch的线路是否与背面pad导通 使用selectBallPad函数进行导通性判断 ‌冗余线路清理‌ 对于未导通的线路: 使用命令 self.incam.COM(f"sel_polyline_feat,operation=select,x={line[&#39;xs&#39;]},y={line[&#39;ys&#39;]}") 通过坐标点选中整根polyline 执行 self.incam.COM("sel_delete") 删除选中的polyline ‌关键说明:‌ "touch"定义为:通过单个坐标点能够选中整根polyline 删除操作针对的是由多个line组成的完整polyline,而非单个line片段 所有坐标匹配均采用6位小数精度进行相等性判断 上述代码是否能够实现?
最新发布
10-31
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值