- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试注释以下代码。
当同时定义了 zone
和 zones
时,或者当定义了 file
时(但不是同时定义了两者),该函数将起作用:
def get_file(zone: str, zones: dict[str, str]) -> pathlib.Path:
pass
def connect(
zone: str | None = None,
zones: dict[str, str] | None = None,
file: pathlib.Path | None = None,
) -> bool:
file = file or get_file(zone, zones)
但这让 mypy
生气了 -
1. Argument of type "str | None" cannot be assigned to parameter "zone" of type "str" in function "_get_vpn_file"
Type "str | None" cannot be assigned to type "str"
Type "None" cannot be assigned to type "str"
2. Argument of type "dict[str, str] | None" cannot be assigned to parameter "zones" of type "dict[str, str]" in function "_get_vpn_file"
Type "dict[str, str] | None" cannot be assigned to type "dict[str, str]"
Type "None" cannot be assigned to type "dict[str, str]"
然后我尝试进行一些激进的类型缩小:
def _check_params_are_ok(
zone: str | None, zones: dict[str, str] | None, file: pathlib.Path | None,
) -> tuple[str, dict[str, str], None] | tuple[None, None, pathlib.Path]:
if zone is not None and file is not None:
raise ValueError("Pass `file` or `zone`, but not both.")
if zone is not None and zones is None:
raise ValueError("connect: Must define `zones` when `zone` is defined.")
if zone is None and file is None:
raise ValueError("connect: Must define `zone` or `file`.")
assert file is not None or (zone is not None and zones is not None)
# Type narrowing
if zone is not None and zones is not None and file is None:
return zone, zones, file
if zone is None and zones is None and file is not None:
return zone, zones, file
raise NotImplementedError("This error from _check_params_ok shouldn't happen.")
def connect(
zone: str | None = None,
zones: dict[str, str] | None = None,
file: pathlib.Path | None = None,
) -> bool:
zone, zones, file = _check_params_are_ok(zone, zones, file)
file = file or get_file(zone, zones)
而且 mypy 仍然显示相同的错误。
即使添加非常明确的断言,Mypy 仍然显示相同的错误:
zone, zones, file = _check_params_are_ok(zone, zones, file)
if file is None:
assert zone is not None and zones is not None
file = file or get_file(zone, zones)
目前我找到的最佳解决方案是内联转换类型,但这会影响代码的可读性并使行难以阅读:
file = file or get_file(cast(str, zone), cast(dict[str, str], zones))
有没有什么好的方法可以缩小类型?
最佳答案
在您的代码中,当您执行 - 正如您所说的那样 - 非常清晰的断言时,您只能在 if< 的主体中分配给
声明:file
/
if file is None:
assert zone is not None and zones is not None
file = get_file(zone, zones)
# file is now a pathlib.Path object
assert file.is_file() # this is now valid
那么你会非常明确,mypy
不应该再对此提示了。
关于mypy - 短路 `or` 的窄类型,当我有两种可能的情况时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74301962/
我想在DIV中做竖线 然后我想在垂直线上对 img 进行分层。(图片是我想要的结果) 我的源代码是这样的。 如何对这些元素进行分层??? 最佳答案 您需要做一些数学运算才能在中心调整它。 .ou
出于各种原因,我正在创建一个网站(尚未在线),该网站具有单独的移动页面。我想向“监控”站点添加一些内容,上面写着“如果浏览器宽度小于 X 像素,请查看 *mobilepagename.html 而不是
当尝试使用 jstat 监视 JVM 的性能时,我看到以下几行 - Timestamp PC PU OC **OU** YGC
html Lorem Ipsum... CSS #outer { background: url('mypic.jpg') no-repeat center top; } #i
我正在使用 sun-codemodel 生成代码。我对泛型有疑问。我知道要生成类似的东西 LinkedList, 我需要用 JType jtype = jCodeModel.ref("LinkedLi
考虑一个简单的系统,其中 PS(处理器系统)启用了 AXI3 主设备,连接到 AXI4 互连,该 AXI4 互连连接到可以访问 BRAM 内存的 BRAM Controller 。 AXI 窄突发的含
我在 Windows 上有一个狭窄的 Python 2.7.6 版本。我还有一个包含“窄”( 0xFFFF) Unicode 代码点的字符串。 >>> wide1 = u'\U0002b740' >>
我有一个函数可以验证 JSON 响应以确保它对应于给定的形状。 这是我定义所有可能的 JSON 值的类型——取自 https://github.com/microsoft/TypeScript/iss
我是一名优秀的程序员,十分优秀!