我在一些代码上运行PyLint,并收到警告:“要么函数中的所有返回语句都应该返回表达式,要么它们都不应该返回表达式。(返回语句不一致)。”
以下是我的代码:
def determine_operand_count(opcode_form, opcode_byte):
if opcode_form == OP_FORM.VARIABLE:
if opcode_byte & 0b00100000 = 0b00100000:
return OP_COUNT.VAR
return OP_COUNT.OP2
if opcode_form == OP_FORM.SHORT:
if opcode_byte & 0b00110000 == 0b00110000:
return OP_COUNT.OP0
return OP_COUNT.OP1
if opcode_form == OP_FORM.LONG:
return OP_COUNT.OP2
这里的“OP_FORM”和“OP_COUNT”是代码前面定义的枚举。
对我来说,这段代码非常可读,我想我很好奇派林的警告在抱怨什么。在我拥有的每个条件中,都会返回一个“OP\u COUNT”类型。事实上,如果这些条件中的任何一个没有返回OP\u计数,我的代码将完全失败。
这似乎是对我的“return语句”的警告,表明有些语句没有返回任何类型的表达式。但这显然不是真的(据我所知),因为每个return语句都返回了一些东西。所以我猜这与隐含回报有关?
但在这一点上,在我的原始代码中,我实际上为我的内部if
语句保留了“fe”子句。但当我这样做时,PyLint给了我另一个警告:“不必要的‘其他’在‘返回’之后(no-else-back)。”
我确实看到了以下内容:“如何修复python中不一致的返回语句?”,但这似乎并没有反映我的代码中的情况。
因此,我不清楚在这种情况下如何满足PyLint,因为代码显然有效,并且似乎正在执行警告建议我需要执行的操作。有鉴于此,我怀疑我遗漏了一些显而易见的东西,但我目前缺乏发现的直觉。如果有人能帮我发现我缺少的东西,我将不胜感激。
在您的情况下,发生这种情况可能有两个原因:
1)由于某种原因,您的变量名大小写不一致:opcode_Form
(大写为F)在第一个if
语句中(可能您只是输入错误,因为您也有=
而不是==
在同一位置)和opcode_form
(小写为f)在所有其他地方。
2) 更有可能的是,由于操作码表单不是类型暗示为操作码表单枚举实例,它实际上可以是任何值,并且最终的else(对于操作码表单既不是操作码表单。变量也不是操作码表单。SHORT(短)或LONG(长)缺失。因此,例如,如果opcode\u form是某个字符串,那么函数实际上不会返回任何内容。
Pylint抱怨当您到达函数的最末端时发生了什么。函数结束时应该发生什么?(添加了一个返回,警告消失了)
def determine_operand_count(opcode_form, opcode_byte):
if opcode_form == OP_FORM.VARIABLE:
if opcode_byte & 0b00100000 == 0b00100000:
return OP_COUNT.VAR
return OP_COUNT.OP2
if opcode_form == OP_FORM.SHORT:
if opcode_byte & 0b00110000 == 0b00110000:
return OP_COUNT.OP0
return OP_COUNT.OP1
if opcode_form == OP_FORM.LONG:
return OP_COUNT.OP2
return OP_COUNT.UNKNOWN
这段代码应该可以工作,但根据我的经验,由于缩进,随着时间的推移会有点脆弱。另一种方法是将其编写为:
def determine_operand_count_v2(opcode_form, opcode_byte):
def variable_form(opcode_byte):
if opcode_byte & 0b00100000 == 0b00100000:
return OP_COUNT.VAR
return OP_COUNT.OP2
def short_form(opcode_byte):
if opcode_byte & 0b00110000 == 0b00110000:
return OP_COUNT.OP0
return OP_COUNT.OP1
def long_form(_):
return OP_COUNT.OP2
opfcn = {OP_FORM.VARIABLE: variable_form,
OP_FORM.SHORT: short_form,
OP_FORM.LONG: long_form}
return opfcn[opcode_form](opcode_byte)
问题内容: 我是Java新手。我正在做一个小型程序实践,并且会丢失return语句错误。 有人可以帮忙吗? 问题答案: 问题出在语句上。您缺少分支。当表达式的计算值为时,您的程序将不返回任何内容,因此将返回错误。 将其更改为如下所示:
Section Contents 基本内容 具体细节
我得到这个错误- (节点:18420)未处理的PromisejectionWarning:TypeError:无法读取未定义的属性“name” (节点:18420)未处理的PromisejectionWarning:未处理的promise拒绝。此错误源于在没有catch块的情况下抛出异步函数的内部,或者拒绝使用未处理的promise。catch()。要在未处理的promise拒绝时终止节点进程,请
ANTLR4书引用了一个多模式示例 https://github.com/stfairy/learn-antlr4/blob/master/tpantlr2-code/lexmagic/ModeTagsLexer.g4 https://github.com/stfairy/learn-antlr4/blob/master/tpantlr2-code/lexmagic/ModeTagsParser.
按照下面的介绍youtube.com/playlist?list=plea0wjq13cnafcc0azrcyqucn_tpeljn1创建本体。它稍微缩小了http://prntscr.com/bo4l3w,我自己添加了canBeTutor(意思是某人可以成为某人的导师)对象属性。据我理解,我可以添加SWRL规则,然后启动reasoner来创建新的知识。所以我添加了prntscr.com/bo4l
我一直在网上关注关于SQLite的android教程。我有一份声明,我不确定: 在这个方法中,意味着什么?它是当前对象还是上下文?谢谢