问句:20250306涨停板,连续涨停天数,涨停时间,涨停原因 Traceback (most...

Criado em: 7 de março de 2025

Respondido usando O1 por Chat01

Pergunta

问句:20250306涨停板,连续涨停天数,涨停时间,涨停原因

Traceback (most recent call last):
File "<string>", line 62, in <module>
File "<string>", line 20, in main
File "I:\0userR\JMP\JMP\Python\Python311\site-packages\pywencai\wencai.py", line 185, in get
data = params.get('data')
^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'get'

有此错误。请修改、给出完整修改后的代码、给出代码后不要补充后面的说明了、这样能加你回答的速度。

import pandas as pd
import sys
from sqlalchemy import create_engine, DateTime, String,text
import pywencai
import akshare as ak
import pandas as pd
from datetime import timedelta
from datetime import datetime as dt
import logging

def main(query_day):
question = f'''{query_day}涨停板,连续涨停天数,涨停时间,涨停原因'''

text
print(f"问句:{question}") df = pywencai.get(query=question,loop=True,sleep=0.5) # 去掉列名中的日期后缀 df.columns = df.columns.str.replace(r'$$.*$$', '', regex=True) # 重命名列以匹配ClickHouse表结构 column_mapping = { '股票代码': 'stock_code', '股票简称': 'stock_name', '最新价': 'latest_price', '最新涨跌幅': 'latest_change_percent', '涨停': 'limit_up', '连续涨停天数': 'consecutive_limit_up_days', '首次涨停时间': 'first_limit_up_time', '涨停原因类别': 'limit_up_reason_category', '涨停明细数据': 'limit_up_details', '最终涨停时间': 'final_limit_up_time', '涨停封单量': 'limit_up_order_volume', '涨停封单额': 'limit_up_order_amount', '涨停开板次数': 'limit_up_breakout_count', '涨停封单量占成交量比': 'limit_up_volume_ratio', '涨停封单量占流通a股比': 'limit_up_float_ratio', 'a股市值(不含限售股)': 'a_share_market_value', '几天几板': 'days_and_boards', '涨停类型': 'limit_up_type', '市场编号': 'market_code', '代码': 'code' } df = df.rename(columns=column_mapping) # 处理 stock_code,只保留前 6 位 df['stock_code'] = df['stock_code'].str[:6] print(df)

... 其余的代码保持不变 ...

if name == 'main':
main('20250306')

Pensamento

Assessing the issue

It's becoming clear that the 'NoneType' object error from pywencai might stem from invalid queries or data retrieval problems. Ensuring data validity and handling potential None values could solve this.

Addressing null responses

To tackle null or error responses from pywencai, I suggest setting a fallback DataFrame or checking for data validity. Exploring parameters or catching exceptions might also help resolve the issue.

Refining the approach

I'm aiming to provide a complete, refined code solution that includes handling pywencai errors, validating data, and ensuring proper DataFrame formatting.

Enhancing error handling

OK, let me see. The user asks for the full code, so I’m refining pywencai error handling, ensuring the result isn't None, and formatting the DataFrame columns correctly.

Reasoned about Python error and solution for 21 seconds

Resposta

python
import pandas as pd import sys from sqlalchemy import create_engine, DateTime, String, text import pywencai import akshare as ak import pandas as pd from datetime import timedelta from datetime import datetime as dt import logging def main(query_day): question = f'''{query_day}涨停板,连续涨停天数,涨停时间,涨停原因''' print(f"问句:{question}") try: df = pywencai.get(query=question, loop=True, sleep=0.5) except AttributeError as e: print(f"AttributeError: {e},返回空表。") df = pd.DataFrame() # 如果依旧为 None 或非 DataFrame,则构造空表 if df is None or not isinstance(df, pd.DataFrame): print("pywencai 未返回有效数据,返回空表。") df = pd.DataFrame() if df.empty: print("数据为空,结束。") return # 去掉列名中的日期后缀 df.columns = df.columns.str.replace(r'$$.*$$', '', regex=True) # 重命名列以匹配ClickHouse表结构 column_mapping = { '股票代码': 'stock_code', '股票简称': 'stock_name', '最新价': 'latest_price', '最新涨跌幅': 'latest_change_percent', '涨停': 'limit_up', '连续涨停天数': 'consecutive_limit_up_days', '首次涨停时间': 'first_limit_up_time', '涨停原因类别': 'limit_up_reason_category', '涨停明细数据': 'limit_up_details', '最终涨停时间': 'final_limit_up_time', '涨停封单量': 'limit_up_order_volume', '涨停封单额': 'limit_up_order_amount', '涨停开板次数': 'limit_up_breakout_count', '涨停封单量占成交量比': 'limit_up_volume_ratio', '涨停封单量占流通a股比': 'limit_up_float_ratio', 'a股市值(不含限售股)': 'a_share_market_value', '几天几板': 'days_and_boards', '涨停类型': 'limit_up_type', '市场编号': 'market_code', '代码': 'code' } df = df.rename(columns=column_mapping) # 处理 stock_code,只保留前 6 位 if 'stock_code' in df.columns: df['stock_code'] = df['stock_code'].astype(str).str[:6] print(df) if __name__ == '__main__': main('20250306')

Compartilhar esta Q&A