python - 部分导入:导入所有内容直至出错
问题描述
有没有办法执行非原子的python导入?
例如,我有一个文件如下:
# Filename: a.py
myvariable = 1
mylist = [1, 2, 3]
raise ImportError
donotimportthis = 5
然后我有一个单独的文件,它执行以下操作:
import a
a.myvariable == 1 # This is okay as it imported it
a.donotimportthis # <-- raise an exception as this is not imported.
我有一个包含一些 python 代码的文件,它遵循以下格式:
...variables...
import X
我没有安装 X,也不需要它,但我确实想要变量。注意:这个文件不是由我自动生成的,而是由一个版本被冻结的工具自动生成的。
解决方案
两种选择,按偏好降序排列:
更改自动生成过程。而不是调用
proprietary_autogen_process
,调用custom_autogen_wrapper
。这个包装器反过来首先调用专有的第三方工具,然后通过搜索导入模块的代码来修改生成的模块源代码X
,并删除它之后的所有内容。这是相对简单的。您只需要注意不要通过对导入代码执行过于松散(或过于严格)的匹配来引入误报或误报。理想情况下,您会使用AST 重写器,但这可能有点矫枉过正;正则表达式搜索
import X
可能会起作用,但如果此文本出现在注释、字符串文字或未执行的方法中,它将产生错误的结果。在导入后者时自动生成的模块可以找到的位置生成存根模块 X。我不建议这样做,因为它很乏味:您可能不能只生成一个空模块,因为自动生成的模块将要使用 X。您需要生成有意义的方法存根。
推荐阅读
- java - Liquibase 没有为 Spring Boot/MySQL 应用程序执行
- c# - 保存按钮激活 c#/wpf
- bash - Openssl sha1 与我在网上找到的不同
- python - sqlAlchemy 中的 ormSession - 在这种情况下如何执行读取和更新?
- javascript - 如何遍历这些输入字段但每个输入都有自己的状态?
- java - 我收到以下代码的“第 9 行:错误:找不到符号”错误:已排序数组的平方
- c# - 将 API 响应对象转换为 List
- wso2 - WSO2IS-5.7.0 OIDC SSO 注销没有 id_token_hint
- apache-spark - spark-shell 命令给出 ERROR Shell:397 - 无法在 hadoop 二进制路径 java.io.IOException 中找到 winutils 二进制文件:
- c++ - 如何有效地将 VkDispatchIndirectCommand 字段提升为 subgroupSize 的倍数