我想将类的名称设置为类中的一个变量,这样当我打印类时,我得到它们的名字,我已经尝试过设置__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 项目,目前只有一个文件。它存在于我的项目的 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) 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 中不是。这可能是一个笑话,或者正在进行中,或者注释掉代码的方式,但这是一个非常成熟的工具 - 我是遗漏了什么?
我使用的是 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 文件夹,但它也不起作用。
我使用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 项目中强制执行类型提示?
目前,我正在使用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),同时确保由于函数签名中指定了类型,所以编写的代码质量更好。
我正在配置我的 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
我必须使用$ .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) 我有一个无法修改的基类(代码可能有其他错误,但请忽略这些)
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) 我有一个字符串,想要检查它是否可以用作有效变量而不会出现语法错误.例如
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 ×8
mypy ×2
pre-commit ×2
python-3.x ×2
argparse ×1
bandit ×1
boolean ×1
javascript ×1
jquery ×1
pip ×1
pyenv ×1
type-hinting ×1