我想使用importlib
重新加载其名称是动态生成的模块。
示例:
import sys
def some_func():
return "sys"
want_reload = some_func()
现在如何使用变量sys
重新加载模块want_reload
?我无法直接将其提供给importlib.reload()
,因为它说它需要一个模块,而不是str。
最好提供一个无效的字符串或未加载的模块,例如"........"
,它引发了异常。
答案 0 :(得分:4)
import React, {Component} from 'react';
class Input extends Component {
state = {
firstName: ''
}
displayNameHandler = (e) => {
let updatedName = e.target.value;
this.setState({firstName: updatedName});
//console.log(updatedName);
}
render() {
return(
<div>
<form>
<label>Enter the Name</label>
<input type="text" name="firstName" onChange={this.displayNameHandler}/>
<button type="button" onSubmit={e => this.displayNameHandler(e)}>Submit</button>
<p>"FirstName: " {this.state.firstName}</p>
</form>
</div>
);
}
}
export default Input;
不会重新加载,但是即使已加载,也会向模块返回一个引用:
importlib.import_module()
答案 1 :(得分:1)
在@spinkus的答案的提示下,我想到了以下解决方案:
由于我不想加载尚未加载的模块,因此可以从sys.modules
want_reload = some_func()
try:
want_reload_module = sys.modules[want_reload]
importlib.reload(want_reload_module)
except KeyError:
raise ImportError("Module {} not loaded. Can't reload".format(want_reload))