小编flo*_*sla的帖子

获取pathlib时,获取错误:TypeError:invalid file:PosixPath('example.txt')

我正在使用Python 3的pathlib模块,如下所示:

from pathlib import Path

filename = Path(__file__).parent / "example.txt"
contents = open(filename, "r").read()
Run Code Online (Sandbox Code Playgroud)

但我在某些机器上遇到此错误:

TypeError: invalid file: PosixPath('example.txt')
Run Code Online (Sandbox Code Playgroud)

但是在我的机器上它可以工作.

python python-3.x pathlib

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

git merge递归他们的,它是如何工作的?

我有一点问题.我们有自己的CMS,它使用git进行协作和版本控制.

现在我有两个git存储库A和B,A是一个项目,B是CMS本身.现在我想让B进入A,但是当我这样做时,我得到了很多合并冲突,冲突的解决方案总是使用来自B的东西.

现在我认为我需要的是

git merge <branch> -s recursive theirs <commit>
Run Code Online (Sandbox Code Playgroud)

因为我想合并,当存在合并冲突时,应该强制使用B中的解决方案.但是我无法让它工作.它一直在告诉我fatal: 'theirs' does not point to a commit.

recursive theirs我发现在这里.

有谁知道我做错了什么?

git merge

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

Python正则表达式替换:从数字中单独反向引用

在正则表达式替换模式中,反向引用看起来像\1.如果要在该反向引用后包含一个数字,这将失败,因为该数字被认为是反向引用号的一部分:

# replace all twin digits by zeroes, but retain white space in between
re.sub(r"\d(\s*)\d", r"0\10", "0 1")
>>> sre_constants.error: invalid group reference
Run Code Online (Sandbox Code Playgroud)

替换模式r"0\1 0"可以正常工作,但在失败的示例中,反向引用\1被解释为\10.

如何将数字'0'\1之前的反向引用分开?

python regex backreference

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

python:模拟一个模块

是否可以使用python模拟模块unittest.mock?我有一个名为的模块config,在运行测试时我想用另一个模块来模拟它test_config.我怎样才能做到这一点 ?谢谢.

config.py:

CONF_VAR1 = "VAR1"
CONF_VAR2 = "VAR2"
Run Code Online (Sandbox Code Playgroud)

test_config.py:

CONF_VAR1 = "test_VAR1"
CONF_VAR2 = "test_VAR2" 
Run Code Online (Sandbox Code Playgroud)

所有其他模块从模块读取配置变量config.在运行测试时,我希望他们从test_config模块中读取配置变量.

python mocking

11
推荐指数
4
解决办法
4387
查看次数

如何模拟从函数导入但在sys.path中不存在的模块?

我是unittest代码,其中包含一个执行本地导入的方法.

def function_under_test():
    import unknown.dependency
Run Code Online (Sandbox Code Playgroud)

(我没有在.py文件顶部使用导入,因为调用该函数时它可能存在也可能不存在.)

unknown.dependency以通常的方式进行模拟只有在某处可以找到它时才有效sys.path.否则,调用patch失败(它拒绝模拟它无法看到的东西):

with mock.patch('unknown.dependency'):
    function_under_test()
>>> ImportError: No module named 'unknown'
Run Code Online (Sandbox Code Playgroud)

文档建议我应该修补使用模块的命名空间 - 在这种情况下,function_under_test.但是,当该命名空间是一个函数时,这不会削减它.调用patch成功,但实际的import语句仍然引用原始的,不存在的unknown模块,该模块无法找到.

with mock.patch('method_under_test.unknown'):
    print("fails")
>>> ImportError: No module named 'unknown'
Run Code Online (Sandbox Code Playgroud)

那么,如果模块本身不存在并且从函数导入,如何用模拟替换依赖模块呢?

python mocking python-unittest

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

在删除发布后段的同时增加预发布的bump2version

我将如何使用bump2version(关于它的调用和/或它的配置)来增加:

1.0.0.a2.post0 # post-release of a pre-release a2
Run Code Online (Sandbox Code Playgroud)

1.0.0.a3 # pre-release a3
Run Code Online (Sandbox Code Playgroud)

可重现的例子:

1.0.0.a2.post0 # post-release of a pre-release a2
Run Code Online (Sandbox Code Playgroud)

__init__.py

1.0.0.a3 # pre-release a3
Run Code Online (Sandbox Code Playgroud)

setup.cfg

[bumpversion]
current_version = 1.0.0.a2.post0
parse = ^
    (?P<major>\d+)\.(?P<minor>\d+)\.(?P<patch>\d+)  # minimum major.minor.patch, 1.2.3
    (?:
    \.
    (?P<prerel>a|alpha|b|beta|d|dev|rc)  # pre-release segment
    (?P<prerelversion>\d+)  # pre-release version num
    )?
    (?:\.post(?P<post>\d+))?  # post-release
serialize =
    {major}.{minor}.{patch}.{prerel}{prerelversion}.post{post}
    {major}.{minor}.{patch}.{prerel}{prerelversion}
    {major}.{minor}.{patch}.post{post}
    {major}.{minor}.{patch}

[bumpversion:file:__init__.py]

[bumpversion:part:prerel]
optional_value = dev
values =
    dev
    d
    alpha
    a
    beta
    b
    rc
Run Code Online (Sandbox Code Playgroud)

此方案的有效版本示例,它采用了 PEP …

python python-3.x bump2version

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

如何使用bump2version创建自定义版本标签

我们使用bump2version来对Gitlab中的构建和发布进行版本控制,使用简单的major.minor.patch(1.1.17)格式。

然而,有时,使用自定义版本格式(例如 1.1.17-test-1)在常规管道之外创建版本很有用。

在当前版本 1.1.17 上尝试使用如下所示的 bubble2versions 命令行标志:

bump2version.exe  --search 1.0.17 --replace 1.0.17-testing --verbose --new-version 1.0.17-test-1 part
Run Code Online (Sandbox Code Playgroud)

不要给出任何错误,但会在管理版本字符串的所有文件中产生错误的版本字符串。

.bumpversion.cfg 文件如下所示:

[bumpversion]
current_version = 1.0.17

[bumpversion:file:CMakeLists.txt]
search = MVR_VERSION "{current_version}"
replace = MVR_VERSION "{new_version}"

[bumpversion:file:VERSION.txt]
search = {current_version}
replace = {new_version}

[bumpversion:file:installer/mvr.iss]
search = #define MyAppVersion "{current_version}"
replace = #define MyAppVersion "{new_version}"
Run Code Online (Sandbox Code Playgroud)

在应该更改版本字符串的每个文件中,更改如下所示:

set(MVR_VERSION "MVR_VERSION "1.0.17"" )
Run Code Online (Sandbox Code Playgroud)

这是不对的。正确的搜索/替换是

set(MVR_VERSION "1.0.17-test-1" )
Run Code Online (Sandbox Code Playgroud)

关于如何使用凹凸2版本标志来实现自定义版本有任何提示吗?

python versioning bump2version

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

为什么 pathlib.Path("C:") 解析为 Windows 上的工作目录?

在 Windows 7 x64 上使用 Python 3.6,该路径"C:"似乎与以下内容的空路径相同Path.resolve()

“空”路径是“当前工作目录” cwd()

>>> from pathlib import Path
>>> Path().resolve()
WindowsPath('C:/Users/me')
>>> Path(r"").resolve()
WindowsPath('C:/Users/me')
>>> Path.cwd().resolve()
WindowsPath('C:/Users/me')
Run Code Online (Sandbox Code Playgroud)

单个字母被解释为文件夹名称:

>>> Path(r"C").resolve()
WindowsPath('C:/Users/me/C')
Run Code Online (Sandbox Code Playgroud)

完整的驱动器号+冒号+反斜杠按预期指向驱动器根:

>>>> Path(r"C:\").resolve()
WindowsPath('C:/')
Run Code Online (Sandbox Code Playgroud)

但是忘记了反斜杠指向当前工作目录?

>>>> Path(r"C:").resolve()
WindowsPath('C:/Users/me/C')
Run Code Online (Sandbox Code Playgroud)

我希望它要么将冒号(不带反斜杠)视为常规字符(对于Path("te:st")),要么忽略它("C"),要么将路径视为驱动器根("C:\")。但相反,它似乎完全忽略了 C。

对于其他驱动器号("A:""X:"、...),解析要么无限期挂起(不好!),要么要求我将磁盘插入驱动器(这表明它也没有完全忽略驱动器号)。

python pathlib

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

如何优雅地循环遍历多个列表

说,我有两个列表ab:

a = [10, 20]
b = [40, 50]
Run Code Online (Sandbox Code Playgroud)

我想一次遍历所有这些值(10, 20, 40, 50).

简单地做两个循环不是我想要的(重复是丑陋的).

我也不想修改其中一个列表:

a.extend(b)
for i in a:
    print(i)
Run Code Online (Sandbox Code Playgroud)

那么我如何在Python中这么做呢?

python loops

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