python - TypeError:'cmp' 是此函数的无效关键字参数-Python
问题描述
我是 python 新手,我有一个脚本,我尝试用 Python 3.5 运行它,我收到了这个错误
priorities[i].sort(cmp=comparer) TypeError: 'cmp' is an invalid keyword argument for this function
这是脚本中出现错误的函数
def comparer(first, second):
"""Compare function for message priorities in maintenance mode"""
return cmp(int(first["Priority"]), int(second["Priority"]))
def get_sequence(inputs, fcm):
"""Creates right sequence for the maintenance mode"""
flags = count_flags(inputs)
sequence = []
for index, where in [(0, '"Axis"="Elevator"'),
(1, '"Axis"="Aileron"'),
(2, '"Axis"="Rudder" or "Axis"="HS-ACE"')]:
if len(flags[index]) == 0:
sequence += WRITE_SEQUENCE_MAINT_0.Get(where)
elif len(flags[index]) == 1:
sequence += WRITE_SEQUENCE_MAINT_1.Get(where)
elif len(flags[index]) > 1:
sequence += WRITE_SEQUENCE_MAINT_2.Get(where)
else:
raise NotImplementedError("This number of flags does not make sense")
priorities = [[], [], []]
for flag in flags[0] + flags[1] + flags[2]:
lines = WRITE_PROCESSING_MSGPRIORITY.Get('"Message Enable Flag"="%s" and "FCM Instance"="%s"' % (flag, fcm))
if len(lines) > 0:
priorities[{"Elevator":0, "Aileron":1, "Rudder":2}[lines[0]["Axis"]]].append(lines[0])
for i in range(3):
priorities[i].sort(cmp=comparer)
for message in sequence:
if "Second Highest Priority" in message["Message"]:
new_m = priorities[{"Elevator":0, "Aileron":1, "Rudder":2}[message["Axis"]]][1]
message["Message"] = new_m["Message"]
message["Lane"] = new_m["Lane"]
message["EP Bit"] = new_m["EP Bit"]
elif "Highest Priority" in message["Message"]:
priorities_for_rudder = priorities[{"Elev":0, "Ail":1, "Rud":2}[message["Axis"]]]
if len(priorities_for_rudder) > 0: # This rudder message does not exist
new_m = priorities_for_rudder[0]
message["Message"] = new_m["Message"]
message["Lane"] = new_m["Lane"]
message["EP Bit"] = new_m["EP Bit"]
else:
message["Message"] = "Rudder Filler Message"
message["Lane"] = "COM"
message["EP Bit"] = "0"
return sequence
这个脚本是用 python 2.7 编写的。
解决方案
在 python 3 中不再有用于排序的 cmp 参数。
使用键和返回要映射的单个值的函数进行比较。
您可以使用此功能代替比较器。
def comparer_key(item):
"""Compare keys for message priorities in maintenance mode. Returns a key."""
return int(item["Priority"])
接着,
for i in range(3):
priorities[i].sort(key=comparer_key)
推荐阅读
- for-loop - for 循环是对引用还是按值操作?
- python - 如何强制 VSCode 使用 Python 3 而不是 Python 2?
- python - 将图例移出图形时,由线条和图片组成的matplotlib图例标签丢失线条
- python - 从 Python 网络爬虫创建 SQL 数据库
- python - 使用正则表达式python将文本文件拆分为单词
- sql-server - 如何防止 SQL Server 事务卡住?
- r - 从公司电脑上的库安装/加载包时出现 R 错误
- c++ - 为什么结构和类模板在空特化上需要明确的尖括号语法?
- amazon-web-services - 在没有确认的情况下将 AWS SNS 订阅到 HTTP 端点?
- html - 跨越视口宽度的背景颜色