Python 什么是;检查';未解析引用';实际上是什么意思?
皮查姆。代码如下:Python 什么是;检查';未解析引用';实际上是什么意思?,python,sqlite,pycharm,Python,Sqlite,Pycharm,皮查姆。代码如下: # db_create.py # # Create the database and tables # import sqlite3 from config import DATABASE_PATH with sqlite3.connect(DATABASE_PATH) as connection: cursor = connection.cursor() # Create table cursor.execute("""
# db_create.py
#
# Create the database and tables
#
import sqlite3
from config import DATABASE_PATH
with sqlite3.connect(DATABASE_PATH) as connection:
cursor = connection.cursor()
# Create table
cursor.execute("""
CREATE TABLE ftasks(
task_id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
due_date TEXT NOT NULL,
priority INTEGER NOT NULL,
status INTEGER NOT NULL)
""")
# Insert dummy data into the table
cursor.execute("""
INSERT INTO ftasks (name, due_date, priority, status)
VALUES("Finish this tutorial", "02/03/2014", 10, 1)
""")
cursor.execute("""
INSERT INTO ftasks (name, due_date, priority, status)
VALUES("Finish Real Python Course 2", "02/03/2014", 10, 1)
""")
代码运行得很好。数据库已创建,一切正常。然而,我在IDE上得到了这个消息。不确定它指的是什么:
我只需更改上面显示的代码,就可以消除错误消息:
# Insert dummy data into the table
cursor.execute("""
INSERT INTO ftasks (name, due_date, priority, status)
VALUES('Finish this tutorial', '02/03/2014', 10, 1)
""")
cursor.execute("""
INSERT INTO ftasks (name, due_date, priority, status)
VALUES('Finish Real Python Course 2', '02/03/2014', 10, 1)
""")
唯一的更改是在SQL语句中使用单引号
为什么双引号版本是未解析的引用
我应该注意,这两个版本的代码都会产生完全相同的数据库文件和内容
进一步的研究基于以下建议:三重引号中的双引号可能会导致PyCharm的编辑器/解析器出现问题
我在编辑器上尝试了以下代码:
a = """
INSERT INTO atable (column1, column2)
VALUES ("test",'test')
"""
b = """
BLAH BLAH atable (column1, column2)
BLAH ("test",'test')
"""
并在Python命令行上运行:
>>> a = """
INSERT INTO atable (column1, column2)
VALUES ("test",'test')
"""
>>> b = """
BLAH BLAH atable (column1, column2)
BLAH ("test",'test')
"""
>>> a
'\nINSERT INTO atable (column1, column2)\nVALUES ("test",\'test\')\n'
>>> b
'\nBLAH BLAH atable (column1, column2)\nBLAH ("test",\'test\')\n'
上述两个定义都产生了结构完全相同的字符串。在Python命令行、IDLE或PyCharm中,我没有看到关于在三引号字符串中使用两种引号的任何问题
IDE编辑器仅与字符串的SQL版本有关,而与其他版本无关:
如果我将指针悬停在棕色高光上,我会收到错误消息。“胡说八道”的版本没有问题
这告诉我它与SQL/SQLite有关。对吗?当您在以“”为边界的字符串中使用双引号时,您是在自找麻烦 Python能够在这些类型的情况下处理双引号,但您的编辑器似乎不喜欢它-很可能您的编辑器使用了比Python解释器更简单的解析器,并且阻塞了
“x”x“
格式的字符串
在此上下文中,“未解析引用”意味着PyCharm认为单词
Finish
是一个引用变量,因为它错误地认为双引号结束了字符串。当然,您没有一个名为Finish
的引用变量从JetBrains获得了word。这是一只虫子。他们正在做这件事。谢谢你的回答。我根据你的想法测试了一些东西,并用进一步的文档更新了这个问题。我很感激你的想法。虽然这个答案可能是正确的(Pycharm被三重引号的字符串弄糊涂了),但你最后的参考资料有点误导。Python在字符串的repr
中使用的引号与程序员以任何方式编写字符串文字时使用的引号没有任何关系。当前的repr
算法是:“如果字符串中有任何单引号而没有双引号,请使用双引号引用,否则使用单引号引用。”不过,我相信这是一个实现细节,所以你可能不应该依赖它。@martin的:Python显示的带有repr
的引号与创建字符串时使用的引号完全没有关系。如果以“”开头的三重引号字符串最好以“”结尾。那么您是说在repr
中,三重引号只会产生一个状态变化,一旦解析器看到另一组三重引号,它就会恢复到原来的状态?好啊我明白了。尽管如此,如果我用“BLAH”更改SQL标记,PyCharm并没有抱怨完全相同的字符串结构。因此,它并没有被各种引号组合搞糊涂——至少在本例中不是这样——而是在SQL语句上下文中使用引号组合时存在问题。在这种情况下,什么是未解决的参考?顺便说一句,谢谢你的澄清。我对Python相当陌生,但从事软件开发已经超过20年了。学习新东西总是很酷的。分享错误号会很有用