小编Ant*_*ile的帖子

python 3 - 在类中设置对象的名称

我想将类的名称设置为类中的一个变量,这样当我打印类时,我得到它们的名字,我已经尝试过设置__name__但是它不起作用.

这是我的班级

class SNMPData(object):
    def __init__(self, device='', speed_down=0, speed_up=0, bgp_peer_state='', bgp_summary='', error=''):
        self.device = device
        self.speed_down = speed_down
        self.speed_up = speed_up
        self.bgp_peer_state = bgp_peer_state
        self.bgp_summary = bgp_summary
        self.error = error
        self.__name__ = device
Run Code Online (Sandbox Code Playgroud)

我创建了一个对象列表,然后尝试打印它们

>>> list = [SNMPData(device='dev_1',speed_down=1),SNMPData(device='dev_2',speed_down=2)]
>>> print(list)
[<SNMPData object at 0x7ff052a42ef0>, <SNMPData object at 0x7ff052a42b38>]
>>>
Run Code Online (Sandbox Code Playgroud)

而不是在0x的SNMPData对象....是否可以打印

['SNMPData dev_1','SNMPData dev_2']
Run Code Online (Sandbox Code Playgroud)

代替?

python

2
推荐指数
1
解决办法
2359
查看次数

如何正确配置我的预提交和预推送钩子?

我有一个简单的 python 项目,目前只有一个文件。它存在于我的项目的 static/cgi-bin 文件夹中。目前,在我的目录的底部,我有一个 .pre-commit-config.yaml 文件,我还没有触及 .git/hooks 文件夹中的文件。我想创建 pre-commit 和 pre-push 钩子,但我似乎无法让它工作。

当我尝试提交时,会发生以下情况:

isort................................................(no files to check)Skipped
flake8...............................................(no files to check)Skipped
black................................................(no files to check)Skipped
Run Code Online (Sandbox Code Playgroud)

当我尝试推送时,出现以下错误:

pytest...................................................................Failed
hookid: pytest

============================= test session starts ==============================
platform darwin -- Python 2.7.15, pytest-4.0.2, py-1.7.0, pluggy-0.8.0
rootdir: /Users/.../deployment, inifile:
collected 0 items
========================= no tests ran in 0.01 seconds =========================
error: failed to push some refs to '...git'
Run Code Online (Sandbox Code Playgroud)

请注意,部署是我正在工作的文件夹。

我在 yaml 文件中的代码是:

repos:
-   repo: local
    hooks:
    - id: isort
      name: isort
      entry: …
Run Code Online (Sandbox Code Playgroud)

python pre-commit-hook pre-commit.com

2
推荐指数
1
解决办法
5216
查看次数

“if False:”在这里的目的是什么?

https://github.com/asottile/pyupgrade/blob/fecacc91e57c224a0bd2564579ef01238650126c/pyupgrade.py#L53

if False:  # pragma: no cover (mypy)
    from typing import Type
    if sys.version_info >= (3,):
        AsyncFunctionDef = ast.AsyncFunctionDef
    else:
        AsyncFunctionDef = ast.stmt
Run Code Online (Sandbox Code Playgroud)

提交没有透露:https : //github.com/asottile/pyupgrade/commit/fecacc91e57c224a0bd2564579ef01238650126c#diff-8213eba6a28bcc759225cd8cf49b2fd1

False 在 Python 2(可以重新定义)中是真实的,但在 Python 3 中不是。这可能是一个笑话,或者正在进行中,或者注释掉代码的方式,但这是一个非常成熟的工具 - 我是遗漏了什么?

python boolean type-hinting python-3.x mypy

2
推荐指数
2
解决办法
243
查看次数

pip 未使用 pip.conf 中定义的额外索引 url

我使用的是 MacOS,我在 ~/.pip 中创建了一个 pip.conf。该文件中只有一个 extral-index-url,如下所示:

[global]
extra-index-url=https://[username]:[password]@artifactory
Run Code Online (Sandbox Code Playgroud)

之后我尝试运行pip config list,我可以在终端中看到 global.extra-index-url= https://[username]:[password]@artifactory

但是,当我尝试使用 pip 安装软件包时,它仍然不检查此 URL。我可以使用以下命令安装该软件包pip install <package> --extra-index-url https://[username]:[password]@artifactory,但只是好奇为什么我的 pip.conf 没有被使用。

顺便说一句,当我运行 pip 时,我正在使用虚拟环境。我确实将 pip.conf 复制到 virtualenv 文件夹,但它也不起作用。

python pip

2
推荐指数
1
解决办法
5148
查看次数

预提交未找到 python 包

我使用pyenv来支持拥有不同版本的 python。

在使用 python 3.7的项目中,我还希望在进行代码更改时使用预提交进行linting 。

但是当 lint 规则运行时,预提交似乎正在用户下的缓存文件夹中查找 python 包,因此无法找到它们......即使它们安装在系统级别。例如:

>git ci -m'lint test'  
...
...
/Users/[]/.cache/pre-commit/repo180cws4u/py_env-python3.7/lib/python3.7/site-packages/ 
...
ModuleNotFoundError: No module named 'six'


>pip list | grep six
six                 1.11.0
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题。(一位同事通过运行/Users/[]/.cache/pre-commit/repo180cws4u/bin/python install -m six解决了问题,但感觉不对..必须可以配置为使用系统包或类似的......?

python pre-commit pyenv pre-commit.com

2
推荐指数
1
解决办法
744
查看次数

Python:强制类型提示

我想知道是否有办法在 Python 项目中强制执行类型提示?

目前,我正在使用mypy 预提交挂钩.pre-commit-config.yaml

- repo: https://github.com/pre-commit/mirrors-mypy
  rev: v0.931
  hooks:
    - id: mypy
Run Code Online (Sandbox Code Playgroud)

使用这个钩子,由于调用函数时的类型错误,我将(正确地)无法提交以下代码add

def add(a: int, b: int) -> int:
    return a + b

add(a=1.0, b=2.0)
Run Code Online (Sandbox Code Playgroud)

但是,使用上面的mypy预提交钩子组合,类型提示仍然没有完全强制执行,我将能够在不使用类型提示的情况下提交以下代码:

def add(a, b):
    return a + b
Run Code Online (Sandbox Code Playgroud)

我也很好奇,在动态类型语言(例如 Python)中强制执行类型提示是否是一个好主意?我知道我可以为我的项目选择一些静态类型语言(例如 Java),但是,我想使用带有强制类型提示的 Python 的原因是因为这允许我依赖现有的 Python 库(例如 Tensorflow),同时确保由于函数签名中指定了类型,所以编写的代码质量更好。

python pre-commit-hook mypy python-typing

2
推荐指数
1
解决办法
2935
查看次数

pyproject.toml :toml 解析器不可用,请使用 toml extra 重新安装

我正在配置我的 pyproject.toml 以便 bandit 排除测试文件,但它给了我错误 ERROR pyproject.toml : toml parser not available, reinstall with toml extra

这是我的 pyproject.toml

[tool.bandit]
exclude_dirs = ["*/test/*"]
tests = ["B201", "B301"]
skips = ["B101", "B601"]

[tool.pre-commit-hooks.bandit]
exclude = ["test*"]
Run Code Online (Sandbox Code Playgroud)

我运行以下命令:bandit -c pyproject.toml -r .

pre-commit bandit pre-commit.com pyproject.toml bandit-python

2
推荐指数
1
解决办法
1063
查看次数

jquery $ ajax没有按预期工作

我必须使用$ .ajax函数执行跨域请求并从URL获取内容.但是下面的代码只显示第一个警报,即警报(myUrl),之后执行停止.第二个警报不显示.我不知道我写的代码有什么问题.谁能告诉我我在这里做错了什么?先谢谢你.

function getContentFromUrl(){
    var myUrl="http://icant.co.uk";
    alert(myUrl);
    $.ajax({
        url: "http://query.yahooapis.com/v1/public/yql?" +
             "q=select%20*%20from%20html%20where%20url%3D%22" +
             encodeURIComponent(myUrl) + "%22&format=xml'&callback=?",
        dataType: 'json',
        data: data,
        success: function () {
            alert("***********"+data.results[0]);
            if (data.results[0]) {
                var htmlText = data.results[0];
            var jsonObject = parseAndConvertToJsonObj(htmlText);
            } else {
                document.getElementById("displayerrors").innerHTML = "Could not load the page.";
            }
        },
        error: function() {
            document.getElementById("displayerrors").innerHTML = "Could not load the page.";
        }
    });
}  
Run Code Online (Sandbox Code Playgroud)

javascript jquery

1
推荐指数
1
解决办法
2662
查看次数

替换 argparse 中的参数

我有一个无法修改的基类(代码可能有其他错误,但请忽略这些)

class BaseClass(object):
    def __init__(self):
        self.parser = argparse.ArgumentParser()
        self.parser.add_argument("arg1", choices=("a", "b"))
Run Code Online (Sandbox Code Playgroud)

我想要的是覆盖 arg1 如下

class DerivedClass(BaseClass):
    def __init__(self):
        BaseClass.__init__(self)
        self.parser.add_argument("arg1", choices=("a", "c", "d"))
Run Code Online (Sandbox Code Playgroud)

python argparse

1
推荐指数
1
解决办法
5163
查看次数

Python 3:如何检查字符串是否可以是有效变量?

我有一个字符串,想要检查它是否可以用作有效变量而不会出现语法错误.例如

def variableName(string):
    #if string is valid variable name:
        #return True
    #else:
        #return False

input >>> variableName("validVariable")
output >>> True
input >>> variableName("992variable")
output >>> False
Run Code Online (Sandbox Code Playgroud)

我不想使用.isidentifier().我想做一个自己的功能.

python python-3.x

1
推荐指数
2
解决办法
429
查看次数