问题是我正在尝试检索 OAuth2 令牌。由于request已被弃用,我正在使用node-fetch它。虽然我可以让它工作request,但我不能node-fetch。
我在这里读过很多帖子,但似乎没有一个真正给出了真正有效的一致答案。我承认我只是看起来不够好。我将其包装在测试中也可能会变得复杂,但由于我收到的错误消息,感觉情况并非如此。
以下是有效的代码(请注意,我必须更改详细信息以保护内部 URL):
var request = require("request");
var options = {
method: "POST",
url: "https://some-url/realms/my-realm/protocol/openid-connect/token",
headers: { "Content-Type": "application/x-www-form-urlencoded" },
form: {
username: "JeffUser",
password: "jeff-password",
grant_type: "password",
client_id: "jeff-client",
client_secret: "jeff-client"
}
};
request(options, function(error, response, body) {
if (error) throw new Error(error);
console.log(body);
})
Run Code Online (Sandbox Code Playgroud)
这有效,我得到了令牌。这是我正在尝试的node-fetch(包含在测试中)失败的内容:
const assert = require("chai").assert;
const fetch = require("node-fetch")
describe("Test API", function() {
let api_token = "";
it("gets a token", async …Run Code Online (Sandbox Code Playgroud) 我正在一些代码上运行 PyLint,我收到警告:“函数中的所有 return 语句都应该返回一个表达式,或者它们都不应该返回一个表达式。(不一致的返回语句)。”
这是我的代码:
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
Run Code Online (Sandbox Code Playgroud)
这里的“OP_FORM”和“OP_COUNT”是前面代码中定义的枚举。
对我来说,该代码是非常易读的代码,我想我很好奇 PyLint 的警告在抱怨什么。在我拥有的每个条件下,都会返回一个“OP_COUNT”类型。事实上,如果这些条件中的任何一个没有返回 OP_COUNT,我的代码就会完全失败。
这似乎是对我的“返回语句”的警告,表明有些没有返回任何类型的表达式。但这显然不是真的(就我所见),因为每个 return 语句都在返回一些东西。所以我猜这与隐含回报有关?
但是到那时,在我的原始代码中,我实际上为我的内部if语句保留了“else”子句。但是当我这样做时,PyLint 又给了我一个警告:“在‘return’之后出现不必要的‘else’(no-else-return)。”
我确实看到了以下内容:“如何在 python 中修复不一致的返回语句? ”,但这似乎没有反映我的代码中的情况。
所以我不清楚在这种情况下如何满足 PyLint,因为代码显然有效并且似乎正在做警告表明我需要做的事情。鉴于此,我怀疑我遗漏了一些明显的东西,但我目前缺乏发现的直觉。任何帮助我发现我遗漏的东西都将不胜感激。
主要问题是 Python 3 告诉我它dict_values被用作参数,而显然需要一个字符串或数字。(即使浮点数是一个数字,或者我是这么认为的。)
我已经寻找各种解决这个问题,而我看到,似乎表明哪些方面可能会做,没什么只是来的权利出来,它说的方式,我可以概括我的详情。
代码是:
def get_features(self, state, action):
q_state = np.array(SimpleExtractor().get_features(state, action).values()).astype(dtype=float)
return q_state
Run Code Online (Sandbox Code Playgroud)
执行代码时会返回以下错误:
float() argument must be a string or a number, not 'dict_values'
Run Code Online (Sandbox Code Playgroud)
根据建议的解决方案之一,我尝试更改 np 行,以便指示 dtype:
def get_features(self, state, action):
q_state = np.array(SimpleExtractor().get_features(state, action).values(), dtype=float)
return q_state
Run Code Online (Sandbox Code Playgroud)
但是,返回完全相同的错误。
我不确定这是否重要,但SimpleExtractor我调用的是大量代码:SimpleExtractor
我有一些理由相信,所编写的这段特定代码可以在 Python 2 上运行。但是我所在的特定项目已被重组以使用 Python 3,因此我无法再使用 Python 2 运行它测试一下。
我想,这可能与如何的事实做features可变正从返回get_features的方法SimpleExtractor。但我不清楚我会怎么做才能把它变成我上面的代码可以接受的某种形式。
我主要只是想了解在这种情况下我应该做什么。
我有一个由RuboCop报告的方法太长:每个方法只允许七行.这是令人讨厌的方法:
def on(definition, visit = false, &block)
if @active.is_a?(definition)
block.call @active if block
return @active
end
@active = definition.new
@active.load if visit
block.call @active if block
@active
end
Run Code Online (Sandbox Code Playgroud)
我打算将顶级if条件转换为保护条款,但我不知道该怎么做.
我尝试将第7行和第8行合并到此:
@active = definition.new().load if visit
Run Code Online (Sandbox Code Playgroud)
但这绝对不起作用.
我不能让RuboCop违规行为有效,也不能改变容差.
python ×2
coding-style ×1
javascript ×1
node-fetch ×1
numpy ×1
oauth-2.0 ×1
pylint ×1
python-3.x ×1
rubocop ×1
ruby ×1