Qiskit 1.0中transpile()传入shots参数报错的解决方法
Qiskit 1.0: 修复"TypeError: transpile() got an unexpected keyword argument 'shots'"错误
问题背景
升级至Qiskit 1.0后,尝试将旧代码中的execute替换为transpile时触发上述错误。旧版本中execute同时完成电路编译与运行,而Qiskit 1.0拆分了这两个独立步骤。
旧代码(Qiskit <1.0)
import numpy as np from qiskit import QuantumCircuit, Aer, execute def calculate_hydrogen_energy(): circuit = QuantumCircuit(2, 2) circuit.h(0) circuit.cx(0, 1) circuit.measure([0, 1], [0, 1]) simulator = Aer.get_backend('qasm_simulator') job = execute(circuit, simulator, shots=1000) result = job.result() counts = result.get_counts(circuit)
错误的升级代码
import numpy as np from qiskit import QuantumCircuit, transpile from qiskit_aer import Aer def calculate_hydrogen_energy(): circuit = QuantumCircuit(2, 2) circuit.h(0) circuit.cx(0, 1) circuit.measure([0, 1], [0, 1]) simulator = Aer.get_backend('qasm_simulator') job = transpile(circuit, simulator, shots=1000) # 错误:transpile不接受shots参数 result = job.result() counts = result.get_counts(circuit)
解决方案
Qiskit 1.0中,transpile仅负责电路编译,运行参数(如shots)需传递给后端的run方法:
正确代码
import numpy as np from qiskit import QuantumCircuit, transpile from qiskit_aer import Aer def calculate_hydrogen_energy(): # 定义量子电路 circuit = QuantumCircuit(2, 2) circuit.h(0) circuit.cx(0, 1) circuit.measure([0, 1], [0, 1]) # 初始化模拟器后端 simulator = Aer.get_backend('qasm_simulator') # 步骤1:编译电路以适配后端 transpiled_circuit = transpile(circuit, simulator) # 步骤2:运行编译后的电路,指定shots参数 job = simulator.run(transpiled_circuit, shots=1000) # 获取结果 result = job.result() counts = result.get_counts(transpiled_circuit) # 可选:打印结果验证 print(counts)
关键说明
transpile():将原始电路转换为符合目标后端约束的优化电路,仅处理编译逻辑,不接受运行相关参数simulator.run():执行编译后的电路,支持传入shots(采样次数)、memory(是否保存每次采样结果)等运行参数
内容的提问来源于stack exchange,提问作者Simón Xolocotzi Muñoz
相关产品推荐
相关产品推荐

