python中如果那么否则代码-如何避免写Python代码中的错误

最近我一直在阅读一些相当不干净的Python代码。也许这主要是因为代码的作者对Python语言本身没有深入的了解,cPython提供了“平台”,这里列出了你在写作时应该尽量避免的一些错误Python代码:

记住Python

Python附带了一大堆标准模块,实现了广泛的功能,包括文本处理,各种数据类型,网络内容(低级和高级),文档处理,文件存档处理,日志记录所有这些都记录在Python库文档中,因此必须至少浏览可用模块列表,因此您可以获得默认情况下可以使用的概念。示例:如果您没有任何性能需求,请不要在Twisted上引入依赖项来实现非常基本且简单的自定义HTTP服务器,请使用BaseHTTPServer和衍生项。

Python是Python,不要试图模仿来自其他语言的错误编码模式

Python是一种成熟的编程语言,它提供了很大的灵活性,但也有一些非常具体的模式,你可能不知道以前使用过的其他语言。

举个例子,根本不要试图模仿PHP的"include"或"require"函数。这可以通过在顶层的模块中编写要包含(并在包含上执行)的代码(即不在函数/ classes / ...中),并使用类似"from foo import *"的内容来完成。你想要执行这个代码。这可行,但可能很难维持这一点。模块不应该像这样使用,所以不要这样。如果您需要在某个时刻执行某些代码,请将其作为函数放入模块中,导入该函数并在任何位置调用它。

不要污染全局命名空间

不要使用"from foo import *",因为这会引入foo中定义的所有内容,还会引入foo中导入的所有模块,甚至可能导入它们等等。尝试"import foo"和使用foo.whatever,或者使用"from foo import whatever,somethingelse"。显式导入使代码更具可读性,并且可以更容易地确定在当前模块中使用的模块中定义的内容,如果它是由您的许多全局导入之一导入的话。

使用Pythonesque编码模式

这显然与前一项非常相关。Python有一些众所周知的结构来处理某些情况。了解并理解它们。

一个例子:您可能知道,Python没有开关/案例构造。通过简单地使用dict和函数对象(或lambda函数),有一种非常简洁的方法来实现它。一个例子:

def handle_one():

return "one"

def handle_two():

return "two"

def handle_default():

return "unknown"

cases = {

"one": handle_one,

"two": handle_two,

"three": lambda: "three",

}

for i in ("one", "two", "three", "four", ):

handler = cases.get(i, handle_default)

print handler()

我们在这里使用dict.get方法,它可以采用可选的"default"参数。挺整洁的,对吧?

不要重新发明与

#1相关的轮子。一个例子?Python包含一个伟大的“记录器”模块,其中包括高级功能,如通过网络登录,通过HTTP,定义多个记录目标,目标树,......无需自己重新实现!

记录您的代码

Python具有称为docstrings的强大语言功能。严格地将它们洒在整个代码中。在编写函数/类时执行此操作,而不是之后。每个人都知道这非常无聊和令人沮丧。

写测试

编写测试代码。Python包括至少2种编写测试的方法:使用标准单元测试,或使用doctests,包含在文档字符串中的测试代码片段,既有用又有说明性。如果您无法测试结果,则无法知道某些代码重构是否顺利。

明智地使用错误报告

Python包括异常处理。明智地使用它:当某些函数出现问题时应该返回一个正常显示给用户的字符串,不要只返回一个带有一些错误信息的普通字符串,好像一切顺利,但返回打包的消息一个异常对象,因此调用代码将知道出错(并且可能根据此信息处理),同时仍然能够向用户显示错误消息。

除此之外,子类Exception(或更具体的Exception子类)不仅仅返回基本异常,除非在某些基本情况下。异常类不应该很大:"class FooException(Exception):pass"切断作业。

在开发过程中不要关闭错误报告

在某些情况下,确保应用程序继续运行是有用的,无论发生什么(例如,Twisted如何处理服务器处理程序异常)。Python提供了一些实现此目的的方法,因此如果您需要它,您可以使用它,但请确保提供一种禁用此方法的方法,这样您就可以告诉应用程序在开发过程中严重崩溃。通过这种方式,您肯定会注意到这个问题,并且您将能够尽早解决问题。

搜索网页!

许多伟大的人为许多事情编写了数以千计的Python模块。他们中的许多人使用非常自由的Python许可证,即使在密切的源环境中也允许您重复使用此代码。Pypi可以是一个很好的起点。

使用Python基本内置函数

一个基本示例:要检查函数参数是否属于某种类型,不要使用"arg .__ class__ == MyClass"之类的东西,请使用"isinstance(arg,MyClass)"。您是否知道isinstance的第二个参数可以是元组/列表?如果是,则将针对此列表中的所有类型检查arg的类型,因此不需要执行多个“isinstance”调用。其他有用的内置函数是getattr / setattr / hasattr(显然),issubclass,...

在非常有用的情况下使用非特定于实例的类方法

就像许多其他编程语言一样,Python允许您向类添加静态方法。只需使用"staticmethod"装饰器装饰你的方法!

在静态方法旁边,Python知道类方法的概念,它将类作为参数。你很可能不经常需要这些。

学习“函数式编程”基础知识

首先,很难绕过函数式编程模式,但它们可以提供一种非常方便和干净的方式来处理多种情况。

不要乱用sys.path

如果你需要导入"外部"模块,尽量不要乱用sys.path。使用distutils函数来发现模块,将它们作为鸡蛋运送,......如果你想改变sys.path,尽量不要对任何“基本”路径进行硬编码:通用路径是一个主要的优点,删除硬编码路径的东西可以是PITA。

使用交互式shell

像iPython这样的Python shell 是必备的。我完全沉迷于它提供的制表符完成和文档快捷方式。

使用代码度量工具

我个人使用PyLint(禁用某些规则)。此工具将检查您的代码中的各种内容:缺少导入,拼写错误,错误的变量/函数/类/模块命名,语法错误,...即使您的测试套件运行正常,它们也可能在您的代码中。也许你甚至可以为你正在使用的VCS添加一个钩子,这不允许你检查代码,除非它得到例如PyLint分数。7.非常有用!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值