无法修复类型错误:无法连接“str”和“NoneType”对象

2024-10-02 08:21:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我试过几个问题,但没法解决。有人能帮我修好这个吗。我在我的一个项目中使用烧瓶,这是我得到的错误。下面是代码和回溯。在

代码与中的第12行相关sqlutils.py. 在

import hashlib
import os
import oursql
import uuid
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from mainapp import app

app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+oursql://'+os.environ.get('DB_USR') \
                                        + ':' + os.environ.get('DB_PASSWD')+'@'\
                                        + os.environ.get('DB_HOST') + '/school_new'
db = SQLAlchemy(app)

回溯:

^{pr2}$

Tags: 项目代码fromimportappflaskdbget
3条回答

正如其他人所提到的,using ^{} on a dictionary will result in a ^{} if the value does not exist

get(key[, default])

Return the value for key if key is in the dictionary, else default. If default is not given, it defaults to None, so that this method never raises a KeyError.

它是一个字典,所以你甚至可以做类似os.environ['DB_HOST']的事情,而不是使用.get()。为什么?因为如果这个值不存在的话,你会在启动时得到一个错误!对于你的应用程序来说,这可能是非常重要的。:)

好的,很明显,os.environ.get('DB_HOST')在代码中返回了None。为什么?在

^{}允许您从shell访问操作系统的环境变量。显然,变量DB_HOST没有在任何地方设置!在

要解决您的问题,您必须在您的操作系统中为DB_HOST设置环境变量,或者以其他方式提供信息。就个人而言,我喜欢通过argparse将这些值作为命令行参数传入,但这取决于您!在


如果您真的想使用操作系统的环境,我将给出一个在bash(我的shell)中设置变量的示例。你必须查找其他shell的并行指令。在

从bash命令行:

$ export TEST_VAL="My hovercraft is full of eels."
$ python
(...)
>>> import os
>>> os.environ['TEST_VAL']
'My hovercraft is full of eels.'

请注意,在Python中使用os.environ不能在变量自身的交互作用之外为这个变量设置一个新值。也就是说:

^{2}$

要调试,请尝试:

app.config['SQLALCHEMY_DATABASE_URI'] = \
    'mysql+oursql://' + os.environ.get('DB_USR','NO_USER') \
    + ':' + os.environ.get('DB_PASSWD', 'NOPASSWD')+'@' \
    + os.environ.get('DB_HOST', 'NO_HOST') + '/school_new'

并记录/打印app.config['SQLALCHEMY_DATABASE_URI']。在

当环境不包含您的设置时,您需要提供一些合理的默认值:

DB_HOST = os.environ.get('DB_HOST', 'localhost')
DB_USR = os.envrion.get('DB_USR', 'root')
DB_PASSWD = os.environ.get('DB_PASSWD', 'sekret')

DB_URL = 'mysql+oursql://{}:{}@{}/school_new'

app.config['SQLALCHEMY_DATABASE_URI'] = DB_URL.format(DB_USR, DB_PASSWD, DB_HOST)

或在未提供关键设置时引发错误:

^{2}$

相关问题 更多 >

    热门问题