鱼C论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 100|回复: 1

[已解决]python定义常量代码报错,请指教

[复制链接]
最佳答案
0 
发表于 2019-1-11 22:12:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
# 该模块用于让 Python 支持常量操作, 模块名 constT.py
class Const:
    def __getattr__(self, name):
        print('常量不存在')

    def __getattribute__(self, name):
        super().__getattribute__(name)
        
    def __setattr__(self, name, value):
        if name in self.__dict__:
            raise TypeError('常量无法改变!')
            
        if not name.isupper():
            raise TypeError('常量名必须由大写字母组成!')

        self.__dict__[name] = value

import sys
sys.modules[__name__] = Const()

运行如下:不知道什么原因会报错,请指教
>>> import constT as co
>>> co.NAME = 1
Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    co.NAME = 1
  File "E:\python files\IDEL FILES\My py file\课后习题\constT.py", line 10, in __setattr__
    if name in self.__dict__:
TypeError: argument of type 'NoneType' is not iterable
最佳答案
2019-1-12 19:33:37
  1.    def __getattribute__(self, name):
  2.         super().__getattribute__(name)
复制代码


把这段去掉。


  1. class Const:
  2.     def __getattr__(self, name):
  3.         print('常量不存在')

  4.         
  5.     def __setattr__(self, name, value):
  6.         if name in self.__dict__:
  7.             raise TypeError('常量无法改变!')
  8.             
  9.         if not name.isupper():
  10.             raise TypeError('常量名必须由大写字母组成!')

  11.         self.__dict__[name] = value

  12. import sys
  13. sys.modules[__name__] = Const()
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
264 
发表于 2019-1-12 19:33:37 | 显示全部楼层    本楼为最佳答案   
  1.    def __getattribute__(self, name):
  2.         super().__getattribute__(name)
复制代码


把这段去掉。


  1. class Const:
  2.     def __getattr__(self, name):
  3.         print('常量不存在')

  4.         
  5.     def __setattr__(self, name, value):
  6.         if name in self.__dict__:
  7.             raise TypeError('常量无法改变!')
  8.             
  9.         if not name.isupper():
  10.             raise TypeError('常量名必须由大写字母组成!')

  11.         self.__dict__[name] = value

  12. import sys
  13. sys.modules[__name__] = Const()
复制代码

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
sonichuang + 5 + 5 + 3 感谢回复

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

小甲鱼强烈推荐上一条 /1 下一条

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号

GMT+8, 2019-6-20 05:46

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表