模块的问题
class const:_attrs = []
def __setattr__(self,NAME,value):
if NAME not in const._attrs:
if str(NAME).isupper():
const._attrs.append(NAME)
super().__setattr__(NAME,value)
else:
raise TypeError('常量名必须由大写字母组成!')
else:
raise TypeError('常量无法改变!')
### import sys
### sys.modules = const()
为什么我不写这两行代码就不会捕捉异常呢??
import const
const.NAME = "FishC"
print(const.NAME)
try:
# 尝试修改常量
const.NAME = "FishC.com"
except TypeError as Err:
print(Err)
try:
# 变量名需要大写
const.name = "FishC"
except TypeError as Err:
print(Err)
只显示:FishC
而且运行程序后会出现一个 .pyc后缀的文件???这是为什么???{:10_269:} 本帖最后由 白two 于 2021-9-7 13:22 编辑
首先,你定义的是实例方法,需要创建实例在去调用
其次,正常调用不会报错,应为能够按照你类里面设置的方法去处理,就不会抛出异常,除非你主动抛出异常,比如如果输入的属性名字位小写,就抛出啥异常之类的
class const:
_attrs = []
def __setattr__(self, name, value):
if name not in self._attrs:
if str(name).isupper():
self._attrs.append(name)
super().__setattr__(name, value)
else:
raise TypeError('常量名必须由大写字母组成!')
else:
raise TypeError('常量无法改变!')
print(self._attrs)
c = const()
c.NAME = "FishC"
print(c.NAME)
try:
# 尝试修改常量
c.NAME = "FishC.com"
print(c.NAME)
except Exception as Err:
print(Err)
try:
# 变量名需要大写
c.name = "FishC"
print(c.name)
except Exception as Err:
print(Err)
print(c._attrs)
下面是运行结果:
['NAME']
FishC
常量无法改变!
常量名必须由大写字母组成!
['NAME']
改进可以考虑主动抛出异常,这个就靠你自己去完成了! 本帖最后由 LIUQOQ 于 2021-9-7 14:57 编辑
白two 发表于 2021-9-7 13:21
首先,你定义的是实例方法,需要创建实例在去调用
其次,正常调用不会报错,应为能够按照你类里面设置的方法去 ...
但是为什么没有
import sys
sys.modules = const()
这两行代码,
在程序里导入模块后,
就不在程序里执行两个try-except语句呢? LIUQOQ 发表于 2021-9-7 14:46
但是为什么没有
import sys
sys.modules = const()
不会啊,你看我没导入就能执行啊 白two 发表于 2021-9-7 18:13
不会啊,你看我没导入就能执行啊
啊这。。。。
我的意思是在另一个程序中使用import导入它
这两个程序分别在不同的文件里 LIUQOQ 发表于 2021-9-7 19:19
啊这。。。。
我的意思是在另一个程序中使用import导入它
这两个程序分别在不同的文件里
那只需要导入这一个就行了啊 {:10_256:} {:5_108:} 来一起学习。 {:10_269:} {:10_266:}不废 我是新人 我是渣渣{:10_256:} w.py 发表于 2022-7-29 21:58
我是渣渣
能领几次? 来一起学习。 {:10_256:} {:10_256:} {:10_256:} 看起来好难啊 {:10_256:}
页:
[1]
2