鱼C论坛

 找回密码
 立即注册
查看: 323|回复: 3

运行后总是显示“IndentationError: unexpected indent”错误,不知如何修改,请高...

[复制链接]
发表于 2024-5-14 14:13:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
# -*- coding:utf-8 -*-
"""
Author: BigCat
"""
import argparse
import json
import time
import datetime
import numpy as np
import tensorflow as tf
from config import *
from get_data import get_current_number, spider
from loguru import logger
with red_graph.as_default():
    red_saver = tf.compat.v1.train.import_meta_graph(
        "{}red_ball_model.ckpt.meta".format(model_args[args.name]["path"]["red"])
            )
        red_sess = tf.compat.v1.Session(graph=red_graph)
        red_saver.restore(red_sess, "{}red_ball_model.ckpt".format(model_args[args.name]["path"]["red"]))
        logger.info("已加载红球模型!")

        blue_graph = tf.compat.v1.Graph()
        with blue_graph.as_default():
            blue_saver = tf.compat.v1.train.import_meta_graph(
                "{}blue_ball_model.ckpt.meta".format(model_args[args.name]["path"]["blue"])
            )
        blue_sess = tf.compat.v1.Session(graph=blue_graph)
        blue_saver.restore(blue_sess, "{}blue_ball_model.ckpt".format(model_args[args.name]["path"]["blue"]))
        logger.info("已加载蓝球模型!")

        # 加载关键节点名
        with open("{}/{}/{}".format(model_path, args.name, pred_key_name)) as f:
            pred_key_d = json.load(f)

        current_number = get_current_number(args.name)
        logger.info("【{}】最近一期:{}".format(name_path[args.name]["name"], current_number))
        return red_graph, red_sess, blue_graph, blue_sess, pred_key_d, current_number
    else:
        red_graph = tf.compat.v1.Graph()
        with red_graph.as_default():
            red_saver = tf.compat.v1.train.import_meta_graph(
                "{}red_ball_model.ckpt.meta".format(model_args[args.name]["path"]["red"])
            )
        red_sess = tf.compat.v1.Session(graph=red_graph)
        red_saver.restore(red_sess, "{}red_ball_model.ckpt".format(model_args[args.name]["path"]["red"]))
        logger.info("已加载红球模型!")

        blue_graph = tf.compat.v1.Graph()
        with blue_graph.as_default():
            blue_saver = tf.compat.v1.train.import_meta_graph(
                "{}blue_ball_model.ckpt.meta".format(model_args[args.name]["path"]["blue"])
            )
        blue_sess = tf.compat.v1.Session(graph=blue_graph)
        blue_saver.restore(blue_sess, "{}blue_ball_model.ckpt".format(model_args[args.name]["path"]["blue"]))
        logger.info("已加载蓝球模型!")

        # 加载关键节点名
        with open("{}/{}/{}".format(model_path,args.name , pred_key_name)) as f:
            pred_key_d = json.load(f)

        current_number = get_current_number(args.name)
        logger.info("【{}】最近一期:{}".format(name_path[args.name]["name"], current_number))
        return red_graph, red_sess, blue_graph, blue_sess, pred_key_d, current_number


def get_year():
    """ 截取年份
    eg:2020-->20, 2021-->21
    :return:
    """
    return int(str(datetime.datetime.now().year)[-2:])


def try_error(mode, name, predict_features, windows_size):
    """ 处理异常
    """
    if mode:
        return predict_features
    else:
        if len(predict_features) != windows_size:
            logger.warning("期号出现跳期,期号不连续!开始查找最近上一期期号!本期预测时间较久!")
            last_current_year = (get_year() - 1) * 1000
            max_times = 160
            while len(predict_features) != 3:
                predict_features = spider(name, last_current_year + max_times, get_current_number(name), "predict")[[x[0] for x in ball_name]]
                time.sleep(np.random.random(1).tolist()[0])
                max_times -= 1
            return predict_features
        return predict_features


def get_red_ball_predict_result(red_graph, red_sess, pred_key_d, predict_features, sequence_len, windows_size):
    """ 获取红球预测结果
    """
    name_list = [(ball_name[0], i + 1) for i in range(sequence_len)]
    data = predict_features[["{}_{}".format(name[0], i) for name, i in name_list]].values.astype(int) - 1
    with red_graph.as_default():
        reverse_sequence = tf.compat.v1.get_default_graph().get_tensor_by_name(pred_key_d[ball_name[0][0]])
        pred = red_sess.run(reverse_sequence, feed_dict={
            "inputs:0": data.reshape(1, windows_size, sequence_len),
            "sequence_length:0": np.array([sequence_len] * 1)
        })
    return pred, name_list


def get_blue_ball_predict_result(blue_graph, blue_sess, pred_key_d, name, predict_features, sequence_len, windows_size):
    """ 获取蓝球预测结果
    """
    if name == "ssq":
        data = predict_features[[ball_name[1][0]]].values.astype(int) - 1
        with blue_graph.as_default():
            softmax = tf.compat.v1.get_default_graph().get_tensor_by_name(pred_key_d[ball_name[1][0]])
            pred = blue_sess.run(softmax, feed_dict={
                "inputs:0": data.reshape(1, windows_size)
            })
        return pred
    else:
        name_list = [(ball_name[1], i + 1) for i in range(sequence_len)]
        data = predict_features[["{}_{}".format(name[0], i) for name, i in name_list]].values.astype(int) - 1
        with blue_graph.as_default():
            reverse_sequence = tf.compat.v1.get_default_graph().get_tensor_by_name(pred_key_d[ball_name[1][0]])
            pred = blue_sess.run(reverse_sequence, feed_dict={
                "inputs:0": data.reshape(1, windows_size, sequence_len),
                "sequence_length:0": np.array([sequence_len] * 1)
            })
        return pred, name_list


def get_final_result(red_graph, red_sess, blue_graph, blue_sess, pred_key_d, name, predict_features, mode=0):
    """" 最终预测函数
    """
    m_args = model_args[name]["model_args"]
    if name == "ssq":
        red_pred, red_name_list = get_red_ball_predict_result(
            red_graph, red_sess, pred_key_d,
            predict_features, m_args["sequence_len"], m_args["windows_size"]
        )
        blue_pred = get_blue_ball_predict_result(
            blue_graph, blue_sess, pred_key_d,
            name, predict_features, 0, m_args["windows_size"]
        )
        ball_name_list = ["{}_{}".format(name[mode], i) for name, i in red_name_list] + [ball_name[1][mode]]
        pred_result_list = red_pred[0].tolist() + blue_pred.tolist()
        return {
            b_name: int(res) + 1 for b_name, res in zip(ball_name_list, pred_result_list)
        }
    else:
        red_pred, red_name_list = get_red_ball_predict_result(
            red_graph, red_sess, pred_key_d,
            predict_features, m_args["red_sequence_len"], m_args["windows_size"]
        )
        blue_pred, blue_name_list = get_blue_ball_predict_result(
            blue_graph, blue_sess, pred_key_d,
            name, predict_features, m_args["blue_sequence_len"], m_args["windows_size"]
        )
        ball_name_list = ["{}_{}".format(name[mode], i) for name, i in red_name_list] + ["{}_{}".format(name[mode], i) for name, i in blue_name_list]
        pred_result_list = red_pred[0].tolist() + blue_pred[0].tolist()
        return {
            b_name: int(res) + 1 for b_name, res in zip(ball_name_list, pred_result_list)
        }


def run(name):
    """ 执行预测 """
    try:
        red_graph, red_sess, blue_graph, blue_sess, pred_key_d, current_number = load_model(name)
        windows_size = model_args[name]["model_args"]["windows_size"]
        data = spider(name, 1, current_number, "predict")
        logger.info("【{}】预测期号:{}".format(name_path[name]["name"], int(current_number) + 1))
        predict_features_ = try_error(1, name, data.iloc[:windows_size], windows_size)
        logger.info("预测结果:{}".format(get_final_result(
            red_graph, red_sess, blue_graph, blue_sess, pred_key_d, name, predict_features_))
        )
    except Exception as e:
        logger.info("模型加载失败,检查模型是否训练,错误:{}".format(e))


if __name__ == '__main__':
    if not args.name:
        raise Exception("玩法名称不能为空!")
    else:
        run(args.name)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-5-14 14:13:24 | 显示全部楼层
这是一个关于Python的错误提示。IndentationError:unexpected indent。这个错误通常是由于缩进问题引起的。在Python中,缩进非常重要,用于表示代码块。如果缩进不正确,Python解释器会报出此错误。

在看您的代码时发现了一些可能导致此错误的问题:
1. 在第35行和第44行,除非有其他代码,否则这些行应该保持与其它代码对齐,否则会导致缩进错误。您可以将这些行的缩进调整为与其它行一样。
2. 在函数`get_red_ball_predict_result`和`get_blue_ball_predict_result`中,在with语句块之后的代码行缩进过多。这些行应该与with语句块对齐,以表示它们是with语句块的一部分。

请注意,我只能根据您提供的代码进行分析并给出一般性的建议。如果问题仍然存在,请尝试根据您的代码做适当的缩进调整。另外,如果还有其他错误或问题,请告诉我,我将竭尽所能帮助您解决。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-5-15 08:39:54 | 显示全部楼层
我的pycharm(2023.03)显示是line:18,怎么查,查不到问题所在。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-15 08:40:07 | 显示全部楼层
civilfem 发表于 2024-05-15 08:39
我的pycharm(2023.03)显示是line:18,怎么查,查不到 ...


如果您的PyCharm显示错误在第18行,那么您可以检查第18行及其周围的代码以找到问题所在。下面是一些建议来帮助您找到错误:

1. 请确保您的文本编辑器中没有隐藏字符或多余的空格。这些隐藏字符可能会导致缩进错误。您可以尝试删除并重新输入第18行的缩进。

2. 检查第18行之前和之后的所有行的缩进是否一致。Python对于缩进非常严格,每个缩进级别通常使用四个空格或一个制表符。

3. 检查是否有额外的空格、制表符或其他特殊字符被插入到您的代码中。这些字符可能会导致缩进错误。您可以尝试手动检查和修复第18行及其周围的空白字符。

4. 您可以尝试在PyCharm中启用"显示空白字符"选项,以便更清楚地看到代码中的空白字符。在PyCharm的设置中,找到"Editor -> General -> Appearance"并勾选"Show whitespaces"选项。

5. 如果问题仍然存在,您可以尝试注释掉第18行,并逐行取消注释,以确定哪一行引起了错误。这样可以帮助您确定具体的错误位置。

希望这些建议能帮助您找到问题所在。如果问题仍然存在,请提供更多关于错误的详细信息,例如完整的错误消息和代码。这样我就能更好地帮助您解决问题。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-23 22:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表