网站被收录又被取消了外发加工费用会计处理

张小明 2026/1/10 17:17:55
网站被收录又被取消了,外发加工费用会计处理,网站系统繁忙是什么意思,连云港权威网站建设价格「编程类软件工具合集」 链接#xff1a;https://pan.quark.cn/s/0b6102d9a66a 在Python学习过程中#xff0c;初学者往往满足于写出能运行的代码。但当项目规模扩大到数百行#xff0c;或是需要与他人协作开发时#xff0c;代码组织能力和错误处理机制就成为区分新手与进…「编程类软件工具合集」链接https://pan.quark.cn/s/0b6102d9a66a在Python学习过程中初学者往往满足于写出能运行的代码。但当项目规模扩大到数百行或是需要与他人协作开发时代码组织能力和错误处理机制就成为区分新手与进阶开发者的关键。本文通过真实项目案例拆解模块化开发的核心技巧和异常处理的最佳实践。一、模块化开发从代码堆砌到工程化1.1 为什么需要模块化想象你正在开发一个电商系统最初把所有功能塞在一个文件里# 糟糕的示例所有功能堆砌在一个文件 def add_to_cart(user_id, product_id): ... def calculate_total(cart): ... def apply_discount(total, coupon): ... def process_payment(total, payment_method): ... def send_order_email(order_data): ... # 1000行代码后...这种意大利面条式代码的三大弊端命名冲突不同功能的变量/函数名可能重复维护困难修改一个功能可能影响其他部分无法复用相同逻辑在不同地方重复编写1.2 模块的正确打开方式模块本质上是保存了Python代码的.py文件。创建第一个模块步骤1创建模块文件# math_utils.py def add(a, b): 加法运算 return a b def multiply(a, b): 乘法运算 return a * b步骤2在另一个文件中使用# main.py import math_utils result math_utils.add(3, 5) print(math_utils.multiply(result, 2)) # 输出161.3 模块导入的5种姿势导入方式示例适用场景基础导入import math_utils需要使用完整命名空间别名导入import math_utils as mu模块名过长时函数导入from math_utils import add只需使用部分功能多函数导入from math_utils import add, multiply需要多个功能时通配符导入from math_utils import *不推荐易命名冲突最佳实践建议生产环境优先使用import module或import module as alias避免使用from module import *除非是测试环境函数导入适合工具类模块如from datetime import datetime1.4 模块的特殊变量每个模块自动包含的隐藏变量# math_utils.py __name__ # 模块名当直接运行时为__main__ __file__ # 模块文件路径 __doc__ # 模块文档字符串 if __name__ __main__: # 测试代码放在这里 print(add(2, 3)) # 直接运行时执行被导入时不执行实用技巧使用__name__判断模块是被直接运行还是被导入在模块底部添加测试代码方便独立调试二、包管理从单文件到大型项目2.1 包的本质当项目包含多个模块时需要组织成包Package。包本质上是包含__init__.py文件的目录my_project/ ├── __init__.py ├── utils/ │ ├── __init__.py │ ├── math_utils.py │ └── string_utils.py └── core/ ├── __init__.py ├── order.py └── payment.py2.2 创建包的3个关键步骤创建目录结构在每个目录添加__init__.py可为空文件通过相对导入组织模块示例跨包调用# core/order.py from ..utils import math_utils # 相对导入上级目录的模块 def calculate_order_total(items): total 0 for item in items: total math_utils.multiply(item.price, item.quantity) return total2.3__init__.py的3种用法空文件仅标记目录为包初始化代码包导入时自动执行定义__all__控制from package import *的行为# 标准库 → 第三方库 → 本地包 import os import requests from my_project import utils2.4 包管理的最佳实践命名规范包名使用小写字母和下划线避免与Python内置模块重名如不要用email.py导入顺序# 标准库 → 第三方库 → 本地包 import os import requests from my_project import utils避免循环导入错误示例a.py导入b.py同时b.py导入a.py解决方案重构代码或延迟导入三、异常处理从崩溃到优雅降级3.1 为什么需要异常处理考虑以下代码def divide(a, b): return a / b print(divide(10, 0)) # 程序崩溃输出Traceback在生产环境中这种崩溃会导致服务中断数据丢失用户体验差3.2 基础异常处理结构try: # 可能出错的代码 result 10 / 0 except ZeroDivisionError: # 处理特定异常 print(不能除以零) except Exception as e: # 处理其他异常 print(f发生未知错误: {e}) else: # 没有异常时执行 print(计算成功) finally: # 无论是否异常都执行 print(计算结束)3.3 常见异常类型异常类型触发场景示例SyntaxError语法错误print(helloIndentationError缩进错误混合使用空格和制表符NameError变量未定义print(x)TypeError类型错误1 aValueError值错误int(abc)KeyError字典键不存在{}[key]FileNotFoundError文件不存在open(nonexist.txt)3.4 异常处理的5个高级技巧技巧1自定义异常class InvalidInputError(Exception): 自定义异常类 pass def validate_age(age): if age 0: raise InvalidInputError(年龄不能为负数) return age技巧2异常链try: # 业务代码 process_data() except DatabaseError as e: raise ConnectionError(数据库连接失败) from e技巧3上下文管理器# 使用with语句自动处理资源 with open(file.txt) as f: data f.read() # 无需手动调用f.close()技巧4异常日志记录import logging logging.basicConfig(filenameapp.log, levellogging.ERROR) try: risky_operation() except Exception as e: logging.error(f操作失败: {str(e)}, exc_infoTrue)技巧5断言调试def calculate_discount(price, discount): assert 0 discount 1, 折扣必须在0-1之间 return price * (1 - discount)3.5 异常处理的反模式裸excepttry: # 代码 except: # 捕获所有异常包括SystemExit等 pass忽略异常try: risky_operation() except Exception: pass # 吞掉异常难以调试异常用于流程控制# 错误用法用异常控制循环 while True: try: x int(input(输入数字: )) break except ValueError: print(请输入数字)四、实战案例构建一个健壮的爬虫模块4.1 项目结构web_crawler/ ├── __init__.py ├── exceptions.py ├── requester.py └── parser.py4.2 自定义异常体系# exceptions.py class CrawlerError(Exception): 爬虫基础异常 pass class RequestError(CrawlerError): 请求相关异常 pass class ParseError(CrawlerError): 解析相关异常 pass4.3 健壮的请求模块# requester.py import requests from .exceptions import RequestError def fetch_url(url, max_retries3): for attempt in range(max_retries): try: headers { User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) } resp requests.get(url, headersheaders, timeout10) resp.raise_for_status() # 自动处理HTTP错误 return resp.text except requests.exceptions.RequestException as e: if attempt max_retries - 1: raise RequestError(f请求失败: {str(e)}) from e4.4 容错的解析模块# parser.py from bs4 import BeautifulSoup from .exceptions import ParseError def extract_titles(html): try: soup BeautifulSoup(html, html.parser) titles [h.get_text() for h in soup.find_all([h1, h2, h3])] if not titles: raise ParseError(未找到标题) return titles except Exception as e: raise ParseError(f解析失败: {str(e)}) from e4.5 主程序使用# __init__.py from .requester import fetch_url from .parser import extract_titles from .exceptions import CrawlerError def crawl_website(url): try: html fetch_url(url) titles extract_titles(html) return titles except CrawlerError as e: print(f爬取失败: {str(e)}) return []五、常见问题QAQ1模块和脚本有什么区别A模块设计用于被导入的.py文件通常包含函数/类脚本直接执行的程序文件通常包含流程控制代码同一个文件可以通过if __name__ __main__:兼顾两种角色Q2如何解决模块导入循环A重构代码将共享功能移到第三个模块将导入语句移到函数内部延迟导入使用字符串形式的导入不推荐Q3异常处理会影响性能吗A异常处理本身开销极小约0.05微秒只有实际发生异常时才有显著开销在性能关键路径上可以用条件判断替代异常处理Q4如何记录完整的异常堆栈Aimport traceback try: risky_operation() except Exception: print(完整堆栈:) traceback.print_exc() # 打印到控制台 # 或写入文件: traceback.format_exc()Q5什么时候应该自定义异常A当需要区分不同类型的业务错误时当需要添加额外上下文信息时当标准异常不能准确表达业务含义时通过本文的模块化实践和异常处理技巧开发者可以将代码组织成可维护的模块和包构建健壮的错误处理机制避免常见的反模式开发出易于扩展和协作的项目记住好的代码不仅应该能运行更应该在出错时保持优雅。模块化是代码复用的基础而异常处理是程序健壮性的保障。在实际开发中建议从项目初期就建立良好的模块结构和异常处理机制这将在后期维护中节省大量时间。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

凡科申请的网站和qq空间一样吗建手机网站一年费用

摘要:美国物流自动化企业 Logic Robotics 推出全球首款多设施自主移动托盘 Logic Pallet,4840 英寸尺寸适配消费品与食品运输,具备 2000 磅(907kg)负载、160 小时超长续航、5 分钟完成拖车装卸能力,集成自主…

张小明 2026/1/7 19:08:08 网站建设

昆明网站搭建网站运营官方网站欣赏

OpenCore配置工具深度解析:从原理到实践的黑苹果引导配置指南 【免费下载链接】OpenCore-Configurator A configurator for the OpenCore Bootloader 项目地址: https://gitcode.com/gh_mirrors/op/OpenCore-Configurator OpenCore配置工具作为黑苹果引导配置…

张小明 2026/1/7 19:02:03 网站建设

建设银行亚洲网站湛江网页定制

还在为数字DSP系统缺少模拟音频输出而困扰?DA-03 DAC模组给出完美解决方案!作为一款专注于数模转换的高性能模块,它全面支持I2S数字立体声输入,轻松将数字信号转换为高保真模拟音频,无需复杂调试,仅需连接串…

张小明 2026/1/9 1:34:10 网站建设

定制网站建设公司策划书wordpress 管理中心

一、选题:找准 “易落地、有价值” 的核心方向​选题是毕业论文的起点,直接决定写作难度和完成质量,需遵循 “三个匹配” 原则:与专业匹配、与能力匹配、与资源匹配。首先,优先从导师研究方向或课题项目中筛选&#xf…

张小明 2026/1/10 0:10:00 网站建设

房地产网站欣赏个人摄影网站制作

《撕碎机哪家好:专业深度测评与排名前五揭晓》一、 开篇:测评背景与目的在固废处理、资源回收领域,撕碎机作为关键预处理设备,其性能直接关系到生产效率与运营成本。市场上品牌众多,性能参数各异,如何选择一…

张小明 2026/1/9 17:32:28 网站建设

网站下要加个备案号 怎么做网站建设功能

Lucky网络工具全面指南:从零搭建个人远程访问系统 【免费下载链接】lucky 软硬路由公网神器,ipv6/ipv4 端口转发,反向代理,DDNS,WOL,ipv4 stun内网穿透,cron,acme,阿里云盘,ftp,webdav,filebrowser 项目地址: https://gitcode.com/GitHub_Trending/luc/lucky …

张小明 2026/1/10 1:42:55 网站建设