首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Python 2下运行脚本时,我如何忽略Python 3语法?

在Python 2下运行脚本时,我如何忽略Python 3语法?
EN

Stack Overflow用户
提问于 2015-09-09 14:36:07
回答 1查看 3.3K关注 0票数 5

在Python 2下运行脚本时,是否可以忽略或屏蔽Python 3的部分语法?

我正在尝试编写一个单元测试,以便在Python 2或Python 3下运行Python模块。

测试包括只在Python 3下有效的语法(“产自”)--我只想在Python 3上运行测试时才运行这些测试。在Python 2下运行Python 3代码时,是否有一种方法可以禁用或屏蔽这个Python 3代码,以便在运行unittest模块时不会引发语法错误?

请参阅下面的削减示例:

代码语言:javascript
复制
import unittest
try:
    import asyncio
    # We must be running under Python 3 - run the sync and async tests.
    ASYNC_SUPPORTED = True
except ImportError:
    # We must be running under Python 2 - only run the sync tests.
    ASYNC_SUPPORTED = False

class TestSyncMethods(unittest.TestCase):
    def test_1(self):
        # Test for synchronous functionality here
        pass

# Test for asynchronous functionality here
class TestAsyncMethods(unittest.TestCase):
    @unittest.skipIf(not ASYNC_SUPPORTED, "Async not supported")
    def test_async_1(self):
        @asyncio.coroutine
        def go():
            yield from sc.identify_a(1, 0x2B, True, True)

如果我试图在Python2.x下运行这个unittest,那么在Python2.x指令中会出现一个语法错误,因为Python2.x不支持“产自”。理想情况下,如果单元测试在Python2.x下运行,我希望防止解析整个TestAsyncMethods类。有人知道怎么做吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-09 15:48:29

这个怎么样:

代码语言:javascript
复制
from sys import version_info

if version_info[0] > 2:
    ASYNC_SUPPORTED = True
    import asyncio
else:
    ASYNC_SUPPORTED = True
    asyncio = None

正如亚历山大所指出的,您仍然需要在py2和py3模块中分离。除非你要与执行人员保持创造性,否则我强烈建议你几乎不惜一切代价避免这种做法。

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

https://stackoverflow.com/questions/32482502

复制
相关文章

相似问题

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