提问人:Ezachiel 提问时间:1/16/2023 最后编辑:Ezachiel 更新时间:1/16/2023 访问量:73
Python:名称“from”作为参数抛出语法错误 [重复]
Python: Name "from" as parameter throws Syntax error [duplicate]
问:
我正在研究 API,我真的无法重命名变量名称以快速处理事情,但我无法运行代码(Python 3.11)。
问题:
def __init__(self, from: str = None)
self.from = from
当我尝试运行这块写得很漂亮的宝石时,我遇到了一个错误。
def __init__(self, from: str = None
^^^^
SyntaxError: invalid syntax
即使是 pylance 的语法也有问题,但我设法在脚本开头修复了它。# type: ignore
有什么建议吗?
编辑器:VSCode
我尝试过谷歌,但没有多大帮助。:)
答:
2赞
ti7
1/16/2023
#1
错误消息不是很清楚,但是一个保留关键字from
https://docs.python.org/3/reference/lexical_analysis.html#keywords
...
except Exception as ex:
raise ValueError("oops") from ex
def my_generator(some_iter):
...
yield from some_iter
from foo import bar
如果你必须保留这个名字(比如说,前端一些其他冻结的 API),你可以从中提取它**kwargs
def __init__(self, *args, **kwargs):
self._from = kwargs["from"]
您可能还必须小心创建类的实例
AwkwardFromArgClass(**{"from": "from value"})
评论
0赞
mtraceur
1/16/2023
替代参数名称而不是“from”的一个好做法是回答:这个参数代表/包含什么?例如,可以使用字符串 () 而不是作为参数名称的类。IPv4Address
IPv4('8.8.8.8')
address
from
1赞
mtraceur
1/16/2023
当关键字确实是最好的单词时,PEP-8 建议附加一个后缀 _
:“如果函数参数的名称与保留关键字冲突,通常最好附加一个尾随下划线,而不是使用缩写或拼写损坏。因此比 .(也许更好的方法是通过使用同义词来避免这种冲突。class_
clss
0赞
ti7
1/16/2023
啊,对于这样的类来说有点宗教信仰,但我更喜欢这里的前缀,以帮助它更清楚地知道是内部成员(仍然避免)stackoverflow.com/questions/1301346。但实际上,像你建议的“地址”或“不要那样做”会好得多!也许最实际的是,像 using 这样的样式提供了一个很好的机会,可以选择性地接受旧值和新值(也许通过),注入警告,并最终希望过渡到一个更友好的名称!_
_from
SyntaxError
kwargs["from"]
KeyError
0赞
mtraceur
1/16/2023
是的,当它是私有属性时,它应该是一个前缀 - 引用的 PEP 8 后缀指南适用于公共参数(我会说公共属性等)。_
_
0赞
marick
1/16/2023
#2
您不能用作参数名称,因为这是用于导入模块的默认语法,例如仅导入 sin 函数。from
from math import sin
尝试使用 F2 重命名它from_
评论
from
是保留关键字,不能用作标识符名称。时期。您唯一的选择是使用不同的签名(重命名参数,还是接受字典?name: str = None
name: Optional[str] = None
name: str | None = None
foo: SomeType = None
foo: SomeType | None = None
None
= None
| None = None