鱼C论坛

 找回密码
 立即注册
查看: 7930|回复: 30

模块的问题

[复制链接]
发表于 2021-9-7 12:55:37 | 显示全部楼层 |阅读模式

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

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

x
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[__name__] = 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后缀的文件???这是为什么???
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-9-7 13:21:08 | 显示全部楼层

回帖奖励 +1 鱼币

本帖最后由 白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']

改进可以考虑主动抛出异常,这个就靠你自己去完成了!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2021-9-7 14:46:06 | 显示全部楼层
本帖最后由 LIUQOQ 于 2021-9-7 14:57 编辑
白two 发表于 2021-9-7 13:21
首先,你定义的是实例方法,需要创建实例在去调用
其次,正常调用不会报错,应为能够按照你类里面设置的方法去 ...


但是为什么没有
import sys
sys.modules[__name__] = const()
这两行代码,
在程序里导入模块后,
就不在程序里执行两个try-except语句呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-7 18:13:34 | 显示全部楼层
LIUQOQ 发表于 2021-9-7 14:46
但是为什么没有
import sys
sys.modules[__name__] = const()

不会啊,你看我没导入就能执行啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-7 19:19:34 | 显示全部楼层
白two 发表于 2021-9-7 18:13
不会啊,你看我没导入就能执行啊

啊这。。。。
我的意思是在另一个程序中使用import导入它
这两个程序分别在不同的文件里
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-8 10:35:02 | 显示全部楼层
LIUQOQ 发表于 2021-9-7 19:19
啊这。。。。
我的意思是在另一个程序中使用import导入它
这两个程序分别在不同的文件里

那只需要导入这一个就行了啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-21 19:08:55 | 显示全部楼层

回帖奖励 +1 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-7-21 22:22:28 | 显示全部楼层

回帖奖励 +1 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-7-22 00:15:52 | 显示全部楼层

回帖奖励 +1 鱼币

来一起学习。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-22 02:12:04 | 显示全部楼层

回帖奖励 +1 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-7-24 16:20:12 | 显示全部楼层

回帖奖励 +1 鱼币

不废
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-7-26 00:20:49 | 显示全部楼层

回帖奖励 +1 鱼币

我是新人
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-29 21:58:50 | 显示全部楼层

回帖奖励 +1 鱼币

我是渣渣
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-29 21:59:35 | 显示全部楼层

能领几次?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-1 23:25:12 | 显示全部楼层
来一起学习。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-2 09:27:18 | 显示全部楼层

回帖奖励 +1 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-2 14:58:51 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-9 14:07:44 | 显示全部楼层

回帖奖励 +1 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-10 08:37:31 | 显示全部楼层

回帖奖励 +1 鱼币

看起来好难啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-10 09:28:35 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 08:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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