请问一个关于定义常量的报错信息

2015-12-01 14:54:24 +08:00
 henryho914
你好,我是刚学习 python,版本是 python3.x 的,今天写了一个 const 的文件,用于定义常量,如果重复赋值就会报错,但是现在的问题是,报错信息却不是我的预期信息,请问是怎么回事呢?

const.py
====================================================
import sys
class ConstError(TypeError):pass

class _const(object):
def __setattr__(self,name,value):
if name in self.__dict__:
raise self.ConstError("Can't rebind const(%s)"%name)
self.__dict__[name]=value

sys.modules[__name__]=_const()
===================================================


useConst
===================================================
import const

const.value = 12
const.value = 13
print (const.value)


报错信息:
Traceback (most recent call last):

AttributeError:'_const'object has no attribute 'ConstError'

我的预期抛错信息应该是 Can't rebind const(value)的,请问是怎么回事呢?
1799 次点击
所在节点    Python
5 条回复
henryho914
2015-12-01 19:23:11 +08:00
已解决.................
class ConstError(TypeError):pass
这个类放错位置了
xiangace
2015-12-03 00:29:44 +08:00
安利下我的作品 kkconst
xiangace
2015-12-03 00:30:27 +08:00
henryho914
2015-12-03 12:00:53 +08:00
@xiangace
谢谢你的代码,学习了不少~
xiangace
2015-12-13 22:49:07 +08:00
@henryho914 那个库实现的代码写复杂了, 可以看我的一篇文章, 由简单的需求衍生出来的库的历史,
大致上是一个演进的过程, 提供 metaclass 的使用案例, 可能帮助你理解你现在的场景需求.
[ 应用于 Restful 接口的错误码设计 – ErrorCode Class(Python) ]( http://www.kaka-ace.com/restful_api_error_code_design_for_python/)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/240295

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX