首页 > 解决方案 > 为什么在 exec 中使用“as”导入模块?

问题描述

有人编写了一段代码,由exec(). 在给定的字符串中,导入了一些模块,但我找不到为什么要使用as前缀导入它们。例如

    CODE_WRAPPER = '''
def main():
    from selenium import webdriver as __mock_webdriver
    import os as __mock_os
    import sys as __mock_sys
    import json
    import datetime
    import time
    import unittest
 
    def print(*args, sep=' ', end=''):
        __mock_sys.stdout.write(sep.join(args) + end)

    try:
        {user_code}
    except:
        //Do something
        raise
    else:
        //Do something else 
    finally:
        __mock_os.chdir(current_path)
        driver.quit()

main()
'''

    def _adjust_code(code, screenshot_path):

        format_dict = {        
            'user_code': '\n        '.join(code.splitlines()) or 'pass',
        }

        return CODE_WRAPPER.format(**format_dict)
        
   
    def _execute_code(code):
        code_output = StreamOutput()
        sys.stdout = code_output
        
        try:
            # Send globals and locals as {} for security issues
            exec(code, {}, {})
        except:
            if getattr(settings, 'DEBUG', False):
                raise Exception(traceback.format_exc())
            else:
                # Limit exception deep for security
                raise Exception(traceback.format_exc(limit=0))
        else:
            output = code_output.get_value_list()
        finally:
            # restore stdout to default
            sys.stdout = sys.__stdout__

        return output

那么有什么理由os将模块导入并用作__mock_os

标签: python-3.x

解决方案


import module as user_defined_name

这样做的一个常见用途是缩短长模块名称,使代码更易于阅读。


推荐阅读