我正在使用python自动填充MySQL数据库。填充数据库的脚本(很长的/path/to/pythonScript.py)实际上是由另一个python脚本(下面的示例)调用的,可以正常工作,并且我添加了一些语句来阻止我插入重复的条目。

当我尝试使用脚本/path/to/pythonScript.py插入重复的条目时,得到了(如预期的那样)

ProgrammingError: 1061 (42000): Duplicate key name 'unique_index'

为了解决这个问题,我想在调用try脚本时编写except /path/to/pythonScript.py语句,如下所示:
import mysql.connector
from mysql.connector.errors import ProgrammingError

# Here I have already successfully connected to the DB, and populated it

try:
    get_ipython().system("ipython /path/to/pythonScript.py") # this is the script that populates the DB. It does not allow the insertion of duplicated entries
except ProgrammingError:
    print("a warning message informing that I am trying to insert a duplicated entry")

当我第一次调用该脚本时,一切都进行得很好(毕竟,数据库是空的)。但是然后当我第二次调用脚本时(即,当我尝试插入重复的条目时),我仍然收到相同的错误ProgrammingError: 1061 (42000): Duplicate key name 'unique_index'
我发现this documentation page上显示了如何处理错误的示例,尽管ProgrammingError上没有专门的示例。在此other documentation page中,ProgrammingError上有一个示例,尽管他们跳过了imports部分,但恐怕我在import方面缺少了一些东西(请注意,当我调用from mysql.connector.errors import ProgrammingError时,我不会出现任何错误)?

最佳答案

您将另一个脚本作为一个独立的进程运行。异常(exception)仅存在于当前进程中-FWIW,您可能正在运行Shell脚本或C编码的二进制应用程序,它是相同的。

我建议您暂时放弃IPython并花几天时间做完整的正式Python教程,并特别注意有关功能和模块的部分。然后,您可能需要重写第一个脚本,使其成为具有适当功能的适当模块(我从您的问题和示例代码中假设,当前它是一个包含顶层所有内容的纯脚本-但我当然错了;)) ,然后重写您的调用脚本以从第一个脚本中导入函数并对其进行调用。

还要注意,ProgrammingError可能由于重复键以外的其他原因而发生,因此您必须检查异常的代码以找出发生了确切的错误。

10-07 20:03