我如何 try:except 在开发和生产之间?

How do I try:except between development and production?

我对此感到困惑。认为这在开发和生产中都可以正常工作(已经用两种不同的方法在两者上设置了环境变量,但我很明显。错了。它只适用于生产。在开发中它会抛出一个以“[=14”结尾的长错误=]: SECRET_KEY 设置不能为空。"

try:
    SECRET_KEY = os.getenv("PRODUCTION_SECRET_KEY")
except:
    SECRET_KEY = os.environ.get('DEVELOPMENT_SECRET_KEY')

os.getenv()doesn't throw an error if the environment variable doesn't exist。因此,即使在您的开发环境中,os.getenv() 调用也很可能会成功,将 SECRET_KEY 设置为空值,从而导致 Django 错误(甚至说设置为空)。

您不应使用 try/except 语句,因为不会引发任何错误。相反,您应该使用 if 语句,例如:

SECRET_KEY = os.getenv('PRODUCTION_SECRET_KEY')
if not SECRET_KEY:
    SECRET_KEY = os.getenv('DEVELOPMENT_SECRET_KEY')

让我们做一个简单的单例class!

class Secret(object):
    def __new__(cls):
        cls.key = os.getenv('PRODUCTION_SECRET_KEY') or os.getenv('DEVELOPMENT_SECRET_KEY')
        if cls.key is None:
            raise SomeError