Python中文
首页
教程
问答
标签
搜索
登录
注册
Python类型:从有效值列表动态创建文本别名
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>我有一个函数,它验证它的参数,只接受给定有效选项列表中的值。在键入方面,我使用<code>Literal</code>类型别名反映此行为,如下所示:</p> <pre class="lang-py prettyprint-override"><code>from typing import Literal VALID_ARGUMENTS = ['foo', 'bar'] Argument = Literal['foo', 'bar'] def func(argument: 'Argument') -> None: if argument not in VALID_ARGUMENTS: raise ValueError( f'argument must be one of {VALID_ARGUMENTS}' ) # ... </code></pre> <p>这违反了DRY原则,因为我必须重写文本类型定义中的有效参数列表,即使它已经存储在变量<code>VALID_ARGUMENTS</code>中<strong>给定<code>VALID_ARGUMENTS</code>变量,如何动态创建<code>Argument</code>文本类型?</strong></p> <p>以下事项不起作用:</p> <pre class="lang-py prettyprint-override"><code>from typing import Literal, Union, NewType Argument = Literal[*VALID_ARGUMENTS] # SyntaxError: invalid syntax Argument = Literal[VALID_ARGUMENTS] # Parameters to generic types must be types Argument = Literal[Union[VALID_ARGUMENTS]] # TypeError: Union[arg, ...]: each arg must be a type. Got ['foo', 'bar']. Argument = NewType( 'Argument', Union[ Literal[valid_argument] for valid_argument in VALID_ARGUMENTS ] ) # Expected type 'Type[_T]', got 'list' instead </code></pre> <p>那么,如何做到这一点呢?或者根本就做不到</p>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>如果有人仍在为此寻找解决方案:</p> <pre><code>typing.Literal[tuple(VALID_ARGUMENTS)] </code></pre>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
使用urllib2进行Web抓取
8 回答
使用urllib2进行Web报废
7 回答
使用urllib2进行简单https身份验证时出现问题(用于获取PayPal OAUTH承载令牌)
3 回答
使用urllib2进行节流
2 回答
使用urllib2远程读取pdf
3 回答
使用urllib2通过flask发送图像
7 回答
使用urllib2通过对等错误重置连接
2 回答
使用urllib2避免503个错误
10 回答
使用urllib2音调符号打开页面
8 回答
使用urllib3 UnicodeDecodeError上载文件
3 回答
使用urllib3.PoolManag时看到ClosedPoolError
10 回答
使用urllib3下载文件的最佳方式是什么
2 回答
使用urllib3下载网页
9 回答
使用urllib3忽略证书验证
4 回答
使用urllib3时的ssl.SSLError
6 回答
使用urllib3的TLS1.1的HTTP GET网站
2 回答
使用urllib3获取JSON d
3 回答
使用urllib3解析来自httpget请求的XML响应
7 回答
使用urllib3进行HTTPS调用时,请使用服务器的ssl证书而不是根CA证书
2 回答
使用urllib3进行多部分表单编码和发布
6 回答