LIUQOQ 发表于 2021-9-7 12:55:37

模块的问题

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:21:08

本帖最后由 白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:46:06

本帖最后由 LIUQOQ 于 2021-9-7 14:57 编辑

白two 发表于 2021-9-7 13:21
首先,你定义的是实例方法,需要创建实例在去调用
其次,正常调用不会报错,应为能够按照你类里面设置的方法去 ...

但是为什么没有
import sys
sys.modules = const()
这两行代码,
在程序里导入模块后,
就不在程序里执行两个try-except语句呢?

白two 发表于 2021-9-7 18:13:34

LIUQOQ 发表于 2021-9-7 14:46
但是为什么没有
import sys
sys.modules = const()


不会啊,你看我没导入就能执行啊

LIUQOQ 发表于 2021-9-7 19:19:34

白two 发表于 2021-9-7 18:13
不会啊,你看我没导入就能执行啊

啊这。。。。
我的意思是在另一个程序中使用import导入它
这两个程序分别在不同的文件里

白two 发表于 2021-9-8 10:35:02

LIUQOQ 发表于 2021-9-7 19:19
啊这。。。。
我的意思是在另一个程序中使用import导入它
这两个程序分别在不同的文件里

那只需要导入这一个就行了啊

kkl44stupid 发表于 2022-7-21 19:08:55

{:10_256:}

hornwong 发表于 2022-7-21 22:22:28

{:5_108:}

BGM在逃123 发表于 2022-7-22 00:15:52

来一起学习。

憨批皮卡 发表于 2022-7-22 02:12:04

{:10_269:}

yoyo925 发表于 2022-7-24 16:20:12

{:10_266:}不废

皇蔡姬 发表于 2022-7-26 00:20:49

我是新人

w.py 发表于 2022-7-29 21:58:50

我是渣渣{:10_256:}

w.py 发表于 2022-7-29 21:59:35

w.py 发表于 2022-7-29 21:58
我是渣渣

能领几次?

BGM在逃123 发表于 2022-8-1 23:25:12

来一起学习。

white_slacker 发表于 2022-8-2 09:27:18

{:10_256:}

w.py 发表于 2022-8-2 14:58:51

{:10_256:}

元豪 发表于 2022-8-9 14:07:44

{:10_256:}

鬼M^I心窍 发表于 2022-8-10 08:37:31

看起来好难啊

元豪 发表于 2022-8-10 09:28:35

{:10_256:}
页: [1] 2
查看完整版本: 模块的问题