python-3.x - 为什么在 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
解决方案
import module as user_defined_name
这样做的一个常见用途是缩短长模块名称,使代码更易于阅读。
推荐阅读
- angular - 组件可以“侦听” URL 更改吗?
- vue.js - 刷新后值消失
- c# - C#从多线程抛出错误根级别创建多个工作表无效
- encryption - 加密不会解密
- django - 请求只能在 Gunicorn Worker Timeout 和新 Worker 启动后服务
- typo3-extensions - TYPO3 扩展模型与 f:form.upload 冲突
- docker - 无法运行简单的 jenkins docker node build(当前不支持 /home 之外的主目录)
- xcode - Xcode:为客户创建一个应用程序以与他们的 MS InTune 一起分发
- python - 在不同的 Conda 环境中调用另一个 python 函数
- javascript - 当我点击它时如何更改标签颜色并且在我更改我的 URL 之前它不会改变