求助:无法通过CMD运行.py文件且窗口闪退,寻求改进建议
问题解决与代码改进建议
一、CMD窗口闪退的解决办法
- 手动启动CMD:打开命令提示符,通过
cd命令切换到main.py和data.py所在的文件夹,然后运行命令python main.py - 在脚本末尾添加暂停:在代码最后一行加上
input("按回车键退出..."),脚本执行完后会等待你按回车才关闭窗口
二、代码改进建议
作为第一个应用,你的逻辑已经很清晰,以下是几个实用优化点:
- 精准导入变量:不要用
from data import *,明确导入需要的变量,避免命名冲突,比如:from data import gmail, outlook, white_text, green_text, red_text - 安全的密码输入:用
getpass模块隐藏密码输入,防止密码明文显示,需先导入getpass模块再替换密码输入代码 - 针对性异常处理:不要用裸
except,捕获具体的SMTP认证异常smtplib.SMTPAuthenticationError,准确判断登录失败,避免误捕获其他错误 - 友好输入提示:把输入提示改成明确告知支持的提供商,比如
"请输入你的邮箱提供商(支持gmail/outlook):" - 精简代码:循环里的
pass可直接删除;变量login改成email_address更贴合实际含义
改进后的示例代码
import smtplib import time import getpass from data import gmail, outlook, white_text, green_text, red_text # 选择邮箱提供商,配置SMTP服务器 while True: email_type = input("请输入你的邮箱提供商(支持gmail/outlook):").lower() if email_type == "gmail": host = gmail["host"] port = gmail["port"] break elif email_type == "outlook": host = outlook["host"] port = outlook["port"] break else: print("暂不支持该邮箱提供商") time.sleep(1) server = smtplib.SMTP(host, port) server.ehlo() server.starttls() while True: email_address = input(white_text + "邮箱地址:") password = getpass.getpass("密码:") try: server.login(email_address, password) print(green_text + "登录成功") break except smtplib.SMTPAuthenticationError: print(red_text + "邮箱地址或密码错误,请重新输入") # 防止CMD窗口闪退 input("按回车键退出...")
内容的提问来源于stack exchange,提问作者Yuri
相关产品推荐
相关产品推荐

