首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在“编译”期间捕获Python中的导入错误和名称错误

在“编译”期间捕获Python中的导入错误和名称错误
EN

Stack Overflow用户
提问于 2019-04-23 14:01:23
回答 2查看 1K关注 0票数 6

您能否使用(linting)工具或编译步骤捕获python中的导入/名称和其他错误?

另一种选择是确保测试所有可能的代码路径(这并不总是可行的,特别是由于现有的大量代码库和其他原因)。

这里有一些例子.

  1. 缺少导入-被pylint捕获,虽然是作为syntax error而不是import error
代码语言:javascript
运行
复制
def test():
    print("Time now is ..", datetime.datetime())

pylint输出:

代码语言:javascript
运行
复制
E0602: Undefined variable 'datetime' (undefined-variable)
  1. 导入表示,但使用的方法不正确。这通过了pylint和py_compile。
代码语言:javascript
运行
复制
from datetime import datetime
def test():
    print("Time now is ..", datetime.today2())

编辑:再添加一个选项.

执行import *显示了一些错误,但在函数中的语句中没有显示错误。

报告了此错误。

代码语言:javascript
运行
复制
from datetime import datetime
print("today2", datetime.today2())

错误:

代码语言:javascript
运行
复制
Python 3.7.0 (default, Aug 22 2018, 15:22:56)
>>> from test import *
...
    print("today2", datetime.today2())
AttributeError: type object 'datetime.datetime' has no attribute 'today2'
>>>

这不是。

代码语言:javascript
运行
复制
from datetime import datetime
def test():
    print("Time now is ..", datetime.today2())
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-05-03 01:25:39

根据我的经验,flake8在捕获缺少的导入和命名错误方面做得很好。为了捕获缺少的导入,您不能使用通配符导入(如"from foo import *“),因为它无法猜测将创建哪些名称。此外,当语法错误存在时,它无法进行这些检测,因此必须首先修复这些错误。

票数 2
EN

Stack Overflow用户

发布于 2019-04-29 14:11:33

与编译语言c++不同,python是一种解释语言。这意味着它没有编译阶段。它逐行解释代码。

根据这一点,直到在运行时到达错误时才发现错误。

如果希望出现错误,则应该以某种方式抛出代码的每一行。最好的方法是使用具有100%测试覆盖率的测试库。

要获得更多信息,请查看this question和它的答案。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55813019

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档