gpt4 book ai didi

python - 是否可以在 sys.exit(1) 之后使用导入?

转载 作者:行者123 更新时间:2023-11-28 21:27:32 28 4
gpt4 key购买 nike

我有一个 GetVars() 函数(不应更改),它在某些情况下会抛出 sys.exit(1)。我想为这种情况做一些清理工作:

try:
common_func.GetVars()
except SystemExit:
cmdline = "-user user1"
sys.argv = ['config.py', cmdline]
import config

config.py 应该带一些参数,但它目前只包含 print 语句。但它没有被执行——有什么办法吗?只是想了解发生了什么,我知道代码看起来很奇怪 :)

更新:现在我要跑

cur_dir = os.path.dirname(os.path.realpath(__file__))
gcti_cfgDir = os.path.join(cur_dir, "..", "cfg-scripts")
sys.path.append(gcti_cfgDir)
import config
try:
sys.exit(1)
except SystemExit:
try:
import config
except:
print "errr"

最佳答案

我用这个 mymodule.py 文件试过了:

$ cat mymodule.py 
import sys

try:
sys.exit(1)
except SystemExit:
cmdline = "-user user1"
sys.argv = ['config.py', cmdline]
import config

和这个 config.py 文件:

$ cat config.py 
print "Everything is ok for now"

结果是预期的:

$ python mymodule.py 
Everything is ok for now

我很确定问题不在导入本身,也不在 SystemExit 捕获中...可能是您的 config.py 文件损坏了。

更新:啊,我相信我明白了!

根据您的新代码,您将在 sys.exit(1) 之前导入 config 模块并将其导入 except也阻止:

import config # <-- here...
try:
sys.exit(1)
except SystemExit:
try:
import config # <-- and here
except:
print "errr"

但是,模块的代码仅在第一次导入时执行。以下的要么将模块放在命名空间中,要么如果它已经在命名空间中,则什么都不做。

在我看来,最好的解决方案是在模块中定义一个函数。如果这是您模块的内容:

print "Everything is ok for now"

只需将其替换为

def run():
print "Everything is ok for now"

而不是在你想要执行它的地方导入模块,只导入一次并调用函数:

import config # This line just imports, does not print nothing
config.run() # OTOH, this one prints the line...
try:
sys.exit(1)
except SystemExit:
try:
config.run() # This one prints the line too
except:
print "errr"

实际上,这无疑是 Python 中处理代码的最佳方式:将代码放入函数中,将函数放入模块中,调用函数。将可执行代码直接放在模块中通常不是一个好的做法,就像您尝试做的那样。

第二次更新:如果您无法更改config.py 模块的代码,您仍然可以使用subprocess.call 调用它。调用 Python 解释器。您甚至可以将您尝试添加的参数传递到 sys.argv:

import subprocess
# ...
subprocess.call(['python', 'config.py'])
try:
sys.exit(1)
except SystemExit:
try:
subprocess.call(['python', 'config.py', "-user", "user1"]) # Extra args
except:
print "errr"

关于python - 是否可以在 sys.exit(1) 之后使用导入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10850134/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com