1. ホーム
  2. Python

Python djangoプログラミングエラーのコツ、自作プログラミングで遭遇したエラーのまとめ 2018年11月8日更新

2022-02-18 12:42:23

私もPythonやdjangoは初心者なので、知らない、見たことのないエラーばかりに遭遇する毎日と言えます。以前は、私が遭遇したすべての問題を収集・整理して、皆さんと共有することはありませんでした。でも、これからは、私が勉強してきた中で遭遇した問題を、皆さんの参考になるように共有できればと思います。もしかしたら、いくつかは正しいかもしれないし、間違っているかもしれない。コメントや意見交換を歓迎します。この記事は、私は応援と一緒に、次々と更新し、完成度を高めていきます〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜。

1.AttributeError("'str' オブジェクトには 'read' という属性がありません ")

このプロンプトが表示されたら、json.load()をjson.load()に置き換えてみてください。

2.TypeError: 'username' はこの関数の無効なキーワード引数です。

データモデルファイル、データ読み込みなどで、ユーザー名が間違って書かれていないか確認してください。

3. AttributeError: 'float' オブジェクトには 'split' 属性がありません。

この場合、いくつかのセルが条件不足で空になっていないか確認します。

4.ValueError。ハンドラ 'scprits_handler' を設定できません。

scprits_handler'のスペルが間違っている箇所をすべて確認してください。あるいは、'scprits_handler' が正常に定義されていないことを確認してください。時には ", (comma)" が欠けていて、システムのスペルエラーによって検出されていないことがあります。

5. pip install インストールのプロンプトが表示されました。不明またはサポートされていないコマンド 'install'。

まずpipというコマンドを使って、pipのインストールディレクトリを探し、そのディレクトリにcdして、pip installを実行してインストールします。

6.UnboundLocalError: 代入前にローカル変数 'key_value' が参照されました。

key_valueが定義されていなかったので、定義されている関数にkey_value=''というフレーズを追加したら動きました

7.NameError:名前 'false' が未定義です。

PythonのFalseは大文字でなければならないので、falseをFalseに変更するだけでよい。

8: TypeError: 'a' is an invalid keyword argument for print()

print(a)でaが誤って書かれていないか確認する。

9:print(test(x,y)) は None を出力する。

def test(x, y):
     print('x+y=', x+y)
     # return a*b
# if __name__ == '__main__':
     # test(1, 3)
#
# add(5, 45)

print(test(11, 12))

出力結果です。

これは、定義された関数 test(x,y) の中に return 文がないためです。そのため、print(test(11,12))文の中で test(11,12) を実行すると、まず test を呼び出して参照 (11,12) を渡し、 test の中で print('x+y=', 11+12) を実行して x+y=23 と出力し、続けて print(test()) を実行していますが、 testメソッドは戻値がなく定義されているのでデフォルトは None、そしてまた None と出力しているためです。

10:AttributeError: 'dict' オブジェクトには 'encode' という属性がありません。

この理由は、辞書はencodeメソッドを使って文字列をエンコードすることができないからです。例えば、str1 = 'Hello world Hello' は str1.encode() でエンコードできますが、dict1 = {'n2':840,'la':39.98049465154441,'l':False} は dict1.encode でエンコードすることができないのです。

11.configparser.DuplicateSectionError: セクション 'type' はすでに存在します

設定ファイルを読み書きするとき、書き込み操作は書き込まれたパラメータがすでに設定ファイルに存在しているかどうかをチェックする必要があります。

12. ファイル書き込みを実行すると、ソースファイルの内容がクリアされることがわかった

元々私のコードロジックは、設定ファイルを読み込み、設定ファイルに「type」グループが存在するかどうかを判断し、存在しない場合はグループタイプを追加し、名前(suno)と値(10211201)を設定する、というものでした。

import configparser

# Instantiate the configParser object
config = configparser.ConfigParser()
# -read read the ini file
config.read('C:\\Users\\\songlihui\\\PycharmProjects\\\AutoTest_02\\\config\\\config.ini', encoding='GB18030')
list = []
list = config.sections()# Get all group names in the config file
if 'type' not in list:# if group type does not exist then insert type group
    add1 = config.add_section('type')

add2 = config.set('type', 'suno', '10211201')# set value for type grouping

o = open('C:\\Users\\\songlihui\\\\PycharmProjects\\\AutoTest_02\\\config\\\config.ini', 'w')
config.write(o)
o.close()

しかし、read phraseをブロックアウトすると、新しく挿入されたデータを除いて、設定ファイルが削除されてしまうことに気づきました。

理由をまとめると、ファイルに対して読み込み操作を行うと、元のファイルの内容がキャッシュに読み込まれ、その後、そのファイルに対して「w」の書き込み操作を行うと、キャッシュにあるファイルを開いたときの古いデータと、新たに追加した新しいデータが再び書き込まれるので、内容が削除されることはなく、追記と加算のように見えるからです。しかし、ファイルに対して読み取り操作を行わないと、このときキャッシュにあるのは新しく追加された内容だけで、その後'w'に対して書き込み操作を行うと、実際には追記ではなく上書きを行っていることになるのです。実行後に再び設定ファイルを開くと、古いデータはクリアされ、今回の追加による新しいデータだけが残っていることがわかります。

13.Python は flask フレームワークを使用して json フォーマットのデータをフロントエンドに返すと、中国語を混乱させます。

私のインターフェースコードは以下の通りです。

import flask
from flask import request, jsonify

'''
flask: web framework, 通过flask提供的装饰器@server.route() converts ordinary functions to services
login interface, need to pass url, username, passwd
'''
# Create a service, treat this current python file as a service
server = flask.Flask(__name__)
# server.config['JSON_AS_ASCII'] = False
# @server.route() can transform ordinary functions into services Path to login interface, request method
@server.route('/login', methods=['get'])
def login():
    # Get the data passed through the url request
    username = request.values.get('name')
    # Get the password passed by url request, in plaintext
    pwd = request.values.get('pwd')
    # determine if username and password are not empty, if not username and password then username and pwd are None
    if username and pwd:
        if username=='songlihui' and pwd=='111':
            resu = {'code': 200, 'message': 'Login successful'}
            return jsonify(resu) # convert dictionary to json string, json is a string
        else:
            resu = {'code': -1, 'message': 'Account password error'}
            return jsonify(resu)
    else:
        res = {'code': 10001, 'message': 'Parameter cannot be empty!}
        return jsonify(res)

if __name__ == '__main__':
    server.run(debug=True, port=8888, host='0.0.0.0')# Specify port, host,0.0.0.0 means that no matter how many NICs, any ip can access



リクエストの後に返される結果。

コードの修正:先頭にimport jsonを追加し、中段のreturn jsonify(resu)の後にreturn json.dumps(resu, ensure_ascii=False)に変更します。

14.Pythonのエラーです。TypeError: 'NoneType' オブジェクトは呼び出し可能なソリューションではありません。

メソッドが呼び出されたら、()を削除してください。