可选字段需要一个必要的值
Optional field requires a necessary value
我有一个带有可选字段的函数 url
def create_ads_task(
template_id: int,
ad_account_id: str,
adset_ids: List[str],
placements: Dict[str, str],
locales: List[Locale],
url: Optional[HttpUrl],
) -> List[Dict[str, Union[str, int]]]:
...body...
当我 运行 测试时,出现错误
E TypeError: create_ads_task() missing 1 required positional argument: 'url'
test.py
assert create_ads_task(
TEMPLATE_ID, AD_ACCOUNT_ID, ADSET_IDS, PLACEMENTS, LOCALES
) == [ ..... ]
现在如何修复测试,但我不明白为什么需要可选字段。该函数并不总是需要 url 参数,有时它不是从前端传递的。如何正确定义可选参数?
类型提示它是可选的是不够的。您必须为其分配一个默认值。喜欢:
def create_ads_task(
template_id: int,
ad_account_id: str,
adset_ids: List[str],
placements: Dict[str, str],
locales: List[Locale],
url: Optional[HttpUrl] = None,
) -> List[Dict[str, Union[str, int]]]:
...body...
Optional[..]
表示传递的参数 应该 提到的类型或 None
,就像你的情况 url
应该是键入 HttpUrl
OR None
,但这并不意味着如果未通过它将带有默认值。请参阅以下示例:
from typing import Optional
# In this b will should be passed as str or None
def test_with_optional(a: str, b: Optional[str]):
print (a,b)
# In this if b is not passed, it will carry a default value of None
def test_with_none(a: str, b: str=None):
print (a,b)
test_with_optional('1', None)
test_with_none('2')
test_with_optional('1')
将抛出错误 TypeError: test_with_optional() missing 1 required positional argument: 'b'
因为它期望 b 为 string
或 None
.
对于您的情况,您的定义如下。详细了解可选参数 here
def create_ads_task(
template_id: int,
ad_account_id: str,
adset_ids: List[str],
placements: Dict[str, str],
locales: List[Locale],
url: Optional[HttpUrl]=None,
) -> List[Dict[str, Union[str, int]]]:
...body...
我有一个带有可选字段的函数 url
def create_ads_task(
template_id: int,
ad_account_id: str,
adset_ids: List[str],
placements: Dict[str, str],
locales: List[Locale],
url: Optional[HttpUrl],
) -> List[Dict[str, Union[str, int]]]:
...body...
当我 运行 测试时,出现错误
E TypeError: create_ads_task() missing 1 required positional argument: 'url'
test.py
assert create_ads_task(
TEMPLATE_ID, AD_ACCOUNT_ID, ADSET_IDS, PLACEMENTS, LOCALES
) == [ ..... ]
现在如何修复测试,但我不明白为什么需要可选字段。该函数并不总是需要 url 参数,有时它不是从前端传递的。如何正确定义可选参数?
类型提示它是可选的是不够的。您必须为其分配一个默认值。喜欢:
def create_ads_task(
template_id: int,
ad_account_id: str,
adset_ids: List[str],
placements: Dict[str, str],
locales: List[Locale],
url: Optional[HttpUrl] = None,
) -> List[Dict[str, Union[str, int]]]:
...body...
Optional[..]
表示传递的参数 应该 提到的类型或 None
,就像你的情况 url
应该是键入 HttpUrl
OR None
,但这并不意味着如果未通过它将带有默认值。请参阅以下示例:
from typing import Optional
# In this b will should be passed as str or None
def test_with_optional(a: str, b: Optional[str]):
print (a,b)
# In this if b is not passed, it will carry a default value of None
def test_with_none(a: str, b: str=None):
print (a,b)
test_with_optional('1', None)
test_with_none('2')
test_with_optional('1')
将抛出错误 TypeError: test_with_optional() missing 1 required positional argument: 'b'
因为它期望 b 为 string
或 None
.
对于您的情况,您的定义如下。详细了解可选参数 here
def create_ads_task(
template_id: int,
ad_account_id: str,
adset_ids: List[str],
placements: Dict[str, str],
locales: List[Locale],
url: Optional[HttpUrl]=None,
) -> List[Dict[str, Union[str, int]]]:
...body...