28.python之自定义异常

自定义异常函数raise

  • 当出现异常情况时,自定义抛出的报错信息
  • 信息将以报错的形式抛出

用法:

raise 异常类型(message)

参数:

  • message:错误信息
  • 无返回值

例1:

def test(a, b):
    if b == 0:
        raise ZeroDivisionError('除数不能为0')
    return a / b

number = test(1, 0)
print(number)

结果:
在这里插入图片描述

例2:

def test(a, b):
    if b == 0:
        raise ZeroDivisionError('除数不能为0')
    return a / b

try:
    number = test(2, 0)
except ZeroDivisionError as e:
    print(f'出现异常:{e}')

结果:
在这里插入图片描述

自定义异常类

  • 继承基类:Exception
  • 在构造函数中定义错误的信息

例:

# 自定义一个异常
class NewError(Exception):
    def __init__(self, message):
        self.message = message

# 自定义异常报错信息
def test(a):
    if a == '123':
        raise NewError('发生错误啦')
    return a

# 测试发生异常
try:
    test('123')
except NewError as e:
    print(e)

结果:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这段代码是一个基于 tkinter 和 socket 的简易聊天室程序。我看到这段代码有以下几点需要改进: 1. 需要添加注释来解释每个函数的作用和参数。 2. 在 addMessage 函数中,应该使用 with 语句来保证文件流的正确关闭。 3. 在 send 函数中,需要添加异常处理来捕捉发送失败的情况,并给出错误提示。 4. 在 send 函数中,应该将获取的消息进行编码,以保证能正确发送中文消息。 5. 在 send 函数中,应该将 IP 和端口号分别获取并存储,而不是每次都从控件中获取。 下面是重构后的代码: ``` import tkinter as tk from tkinter import messagebox import socket class Chatroom: def __init__(self, master): self.master = master self.master.title("简易聊天室") self.master.geometry("400x400") self.records = tk.Text(self.master, state=tk.DISABLED) self.records.pack(fill=tk.BOTH, expand=True) self.message = tk.StringVar() self.message_entry = tk.Entry(self.master, textvariable=self.message) self.message_entry.pack(fill=tk.X) self.ip = tk.StringVar() self.ip_entry = tk.Entry(self.master, textvariable=self.ip) self.ip_entry.pack(fill=tk.X) self.port = tk.StringVar() self.port_entry = tk.Entry(self.master, textvariable=self.port) self.port_entry.pack(fill=tk.X) self.send_button = tk.Button(self.master, text="发送", command=self.send) self.send_button.pack() self.client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) def addMessage(self, message): with open("chatroom.log", "a") as f: self.records.config(state=tk.NORMAL) self.records.insert(tk.END, message) self.records.config(state=tk.DISABLED) self.records.see(tk.END) self.records.update() f.write(message + "\n") def send(self): ip = self.ip.get() port = self.port.get() if not ip or not port: messagebox.showerror("错误提示", "请输入有效的 IP 和端口号!") return message = self.message.get() if not message: messagebox.showerror("错误提示", "请输入待发送的信息!") return try: message_bytes = message.encode("gb2312") self.client.sendto(message_bytes, (ip, int(port))) self.addMessage(f"我对{ip}:{port}说:“{message}”") self.message.set("") except: messagebox.showerror("错误提示", "发送失败!") if __name__ == "__main__": root = tk.Tk() app = Chatroom(root) root.mainloop() ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值