gql = f'LOOKUP ON movie WHERE movie.title == "{}" YIELD movie.{}'.format(movieName, classification) ^ SyntaxError: f-string: empty expression not allowed;大佬求助,用python从知识图谱中取数报错,代码见下面;

提问参考模版:

nebula 版本:3.0
部署方式:单机
安装方式:Docker
是否上生产环境:N
硬件信息
磁盘( 推荐使用 SSD)512G
CPU、内存信息 M28核 16G
问题的具体描述:

报错代码:
gql = ‘LOOKUP ON movie WHERE movie.title == “{}” YIELD movie.{}’.format(movieName, classification)
result = connection.execute(session_id,gql)

response = []
for record in result:
    response.append(record)
return classification, result

全部代码:

# -*-coding = utf-8-*-

# Author:qyan.li
# Date:2022/5/19 17:46
# Topic:借助于python语言构建基于知识图谱的电影智能问答系统

'''
智能问答系统构建:
1. 网络爬虫 + 数据集构建
2. 电影知识图谱构建
3. 问句处理 + 查询返回
'''

# 相关模块导入
import jieba.posseg as pseg
import jieba
from py2neo import Graph
from fuzzywuzzy import fuzz
from nebula3.gclient.net import ConnectionPool
from nebula3.Config import Config

## 建立Nebula Graph对象,便于后续执行查询语句
config = Config()
config.max_connection_pool_size = 10
connection_pool = ConnectionPool()
connection_pool.init([('10.28.150.144', 9669)], config)
client = connection_pool.get_session('root', 'nebula')
connection = connection_pool.get_connection()

session = connection.authenticate("root", "nebula")
session_id = session.get_session_id()

## 用户意图的判断
#设计八类问题的匹配模板
info = ['这部电影主要讲的是什么?','这部电影的主要内容是什么?','这部电影主要说的什么问题?','这部电影主要讲述的什么内容?']
director = ['这部电影的导演是谁?','这部电影是谁拍的?']
actor = ['这部电影是谁主演的?','这部电影的主演都有谁?','这部电影的主演是谁?','这部电影的主角是谁?']
time = ['这部电影是什么时候播出的?','这部电影是什么时候上映的?']
country = ['这部电影是那个国家的?','这部电影是哪个地区的?']
type = ['这部电影的类型是什么?','这是什么类型的电影']
rate = ['这部电影的评分是多少?','这部电影的评分怎么样?','这部电影的得分是多少分?']
num = ['这部电影的评价人数是多少?','这部有多少人评价过?']
# 设计八类问题的回答模板
infoResponse = '{}这部电影主要讲述{}'
directorResponse = '{}这部电影的导演为{}'
actorResponse = '{}这部电影的主演为{}'
timeResponse = '{}这部电影的上映时间为{}'
countryResponse = '{}这部电影是{}的'
typeResponse = '{}这部电影的类型是{}'
rateResponse = '{}这部电影的评分为{}'
numResponse = '{}这部电影评价的人数为{}人'
# 用户意图模板字典
stencil = {'info':info,'director':director,'actor':actor,'time':time,'country':country,'type':type,'rate':rate,'num':num}
# 图谱回答模板字典
responseDict = {'infoResponse':infoResponse,'directorResponse':directorResponse,'actorResponse':actorResponse,'timeResponse':timeResponse,'countryResponse':countryResponse,'typeResponse':typeResponse,'rateResponse':rateResponse,'numResponse':numResponse}

# 由模板匹配程度猜测用户意图
## 模糊匹配参考文献:https://blog.csdn.net/Lynqwest/article/details/109806055
def AssignIntension(text):
    '''
    :param text: 用户输入的待匹配文本
    :return: dict:各种意图的匹配值
    '''
    stencilDegree = {}
    for key,value in stencil.items():
        score = 0
        for item in value:
            degree = fuzz.partial_ratio(text,item)
            score += degree
        stencilDegree[key] = score/len(value)

    return stencilDegree


## 问句实体的提取
## 结巴分词参考文献:https://blog.csdn.net/smilejiasmile/article/details/80958010
def getMovieName(text):
    '''
    :param text:用户输入内容
    :return: 输入内容中的电影名称
    '''
    movieName = ''
    jieba.load_userdict('./selfDefiningTxt.txt')
    words =pseg.cut(text)
    for w in words:
        ## 提取对话中的电影名称
        if w.flag == 'lqy':
            movieName = w.word
    return movieName


## GQL语句生成,知识图谱查询,返回问句结果
## py2neo执行cyphere参考文献:https://blog.csdn.net/qq_38486203/article/details/79826028
def SearchGraph(movieName,stencilDcit = {}):
    '''
    :param movieName:待查询的电影名称
    :param stencilDcit: 用户意图匹配程度字典
    :return: 用户意图分类,知识图谱查询结果
    '''
    classification = [k for k,v in stencilDcit.items() if v == max(stencilDcit.values())][0]
    ## python中执行cyphere语句实现查询操作
    gql = 'LOOKUP ON movie WHERE movie.title == "{}" YIELD movie.{}'.format(movieName, classification)
    result = connection.execute(session_id,gql)

    response = []
    for record in result:
        response.append(record)
    return classification, result


## 根据问题模板回答问题
def respondQuery(movieName,classification,item):
    '''
    :param movieName: 电影名称
    :param classification: 用户意图类别
    :param item:知识图谱查询结果
    :return:none
    '''
    query = classification + 'Response'
    response = [v for k,v in responseDict.items() if k == query][0]
    print(response.format(movieName,item))

def main():
    queryText = '肖申克的救赎这部电影的导演是谁?'
    movieName = getMovieName(queryText)
    dict = AssignIntension(queryText)
    classification,result = SearchGraph(movieName,dict)
    respondQuery(movieName,classification,result)

if __name__ == '__main__':
    main()
gql = f'LOOKUP ON movie WHERE movie.title == “{}” YIELD movie.{}'.format(movieName, classification) 

^ SyntaxError: f-string: empty expression not allowed;

你这个标题报错和你贴的代码写的不一样呀。而且这是一个 python 问题,和 NebulaGraph 其实没有关系。

这个表层是说你 f-string 里有空变量,你搞混了 string 的 .format 和 f-string 的两个用法:
f-string

name = "Tom"
f"hi {name}"

string.format

f"hi {}".format("Tom")

另外,贴代码的时候要格式化一下,我给你编辑了

此话题已在最后回复的 30 天后被自动关闭。不再允许新回复。