为什么具有名为" del","返回"的对象属性是语法错误?等等?

时间:2015-03-30 13:01:49

标签: python

我明白一个人不应该能够取代" del" (" return" etc)关键字,但我不明白为什么不可能这样做:

myobj.del(mystr)

解析器可以将它与什么混淆?有没有办法允许它?

当然,我可以使用不同的名称,但我希望在AWS工具s3cmd周围有一个小的自定义包装器并执行s3cmd.del("s3://some/bucket/")之类的操作并使用" del"由我的s3cmd类中的__getattr__处理...所以名称" del"是我真的很乐意使用的东西。

1 个答案:

答案 0 :(得分:8)

这是因为这些词是关键词。 Python中的关键字是不能用作普通标识符的保留字。

该列表包含from the doc function keyword

>>> import keyword  
>>> import pprint
>>> pprint.pprint(keyword.kwlist)
['and',
 'as',
 'assert',
 'break',
 'class',
 'continue',
 'def',
 'del',
 'elif',
 'else',
 'except',
 'exec',
 'finally',
 'for',
 'from',
 'global',
 'if',
 'import',
 'in',
 'is',
 'lambda',
 'not',
 'or',
 'pass',
 'print',
 'raise',
 'return',
 'try',
 'while',
 'with',
 'yield']

Konrad's comment

中提到的原因很明显
  

关键词并不神奇。但是,当禁用标识符的关键字时,它使解析器极大更容易编写。特别是,它可以更容易地为解析错误提供人类可读的错误消息,因为解析器能够推断出更多关于错误的上下文。