Python 了解结构和全局变量

Python understanding structure and global variables

我是 python 的新手,需要一些建议。

这是我组织和编写脚本的方式:

#!/usr/bin/python

import ...

exitCode = 1   

def sendmail(mess,type): 
    [...]
    if ...
       exitCode = 9
    else
       exitCode = 1

    [...]
    return 0

#=====
#start

[...]

try:
    [...]

except:  
    sendmail(message,"connect")
    sys.exit(exitCode)

sys.exit(0)
  1. 导入部分
  2. 变量定义
  3. 函数发送邮件
  4. start(应该是我的主)里面有几组try/exceptif/else

我想了解一些事情:

  1. 我的脚本结构是否正确?没看懂main函数是怎么定义的,有时用,有时不用。。。应该怎么办才好?

  2. 在"main"的某个点调用了sendmail函数,如果出错,设置变量exitCode为9。比进一步处理完成,它 returns 0。现在 exitCode 定义在最顶部,所以我希望它是一个全局变量。但是,如果我在 except 中读取它的值(在 sendmail 之后不久),它的值是“1”,而我期望是“9”。如果我在 sendmail 函数中读取它,则该值正确为“9”。我究竟做错了什么?我想我可以使用 return exitCode 而不是 return 0,但我想了解这个错误。

您的代码中有两个不同的 exitCode。全局范围内的一个,您在 import 之后分配;和 sendmail 里面的那个。修改一个不会影响另一个。如果要在函数内修改全局 exitCode,请使用 global 语句。

def sendmail(mess,type): 
    global exitCode
    [...]
  1. 最好用

    if __name__ == "__main__":
    

作为代码的主要入口点(参见说明 here)。

  1. 要在全局范围内寻址变量,您应该在其前面加上:

    global exitCode
    

但是,通常不鼓励使用全局变量。在您的情况下,最好将 sendmail() 函数的 return 值设置为退出代码,因此它看起来像这样:

#!/usr/bin/python

import ...

def sendmail(mess,type): 
    [...]
    if ...
       exitCode = 9
    else
       exitCode = 1

    [...]
    return exitCode

#=====
#start

[...]

try:
    [...]

except:  
    exitCode = sendmail(message,"connect")
    sys.exit(exitCode)

sys.exit(0)