使用 Streamlit 在加载 IBMQ 帐户时处理 Qiskit 异常

问题描述

我正在尝试构建一个简单的 Web 应用程序,用于使用 IBMQ (Qiskit) 和 Streamlit 生成随机数。但是,如果没有 IBMQ 保存的帐户,它应该等待用户输入 API 令牌,如果令牌有效,则继续并加载 IBMQ 后端。 下面是我写的代码

filename.py

# -*- coding: utf-8 -*-
"""
Created on Sun Jan 31 01:30:00 2021

@author: ShadabHussain
"""

import warnings 
warnings.filterwarnings("ignore")
import requests
import streamlit as st

# IBMQ
from qiskit import QuantumRegister,ClassicalRegister,QuantumCircuit,execute,IBMQ
from qiskit.tools.monitor import job_monitor


st.set_page_config(page_title='QRNG',page_icon=None,layout='centered',initial_sidebar_state='auto')

st.markdown("<h1 style='text-align: center; color: black;'>Quantum Random Number Generator</h1>",unsafe_allow_html=True)

quantum_computer = st.sidebar.selectBox("Select Quantum Computer Type",['IBMQ'])

subheader = "using "+ quantum_computer
st.markdown(f"<h1 style='text-align: center; color: black;'>{subheader}</h1>",unsafe_allow_html=True)


def about(quantum_computer):
    if quantum_computer == "IBMQ":
        text = "Qiskit is an open source SDK for working with quantum computers at the level of pulses,circuits and application modules. It accelerates the development of quantum applications by providing the complete set of tools needed for interacting with quantum systems and simulators."
        link = 'https://qiskit.org/'
        link_text = 'For Qiskit Documentation'
    st.markdown(f"<body style='text-align: center; color: black;'>{text}</body>",unsafe_allow_html=True)
    st.markdown(f"<h4 align='center'> <a href={link}>{link_text}</a> </h4>",unsafe_allow_html=True)
        
    
about(quantum_computer)

def ibmq_qrng(minimum,maximum):
        
    q = QuantumRegister(num_q,'q')
    c = ClassicalRegister(num_q,'c')

    circuit = QuantumCircuit(q,c)
    circuit.h(q)  # Applies hadamard gate to all qubits
    circuit.measure(q,c)  # Measures all qubits

    job = execute(circuit,backend,shots=1)
    counts = job.result().get_counts()
    result = int(counts.most_frequent(),2)
    result1 = minimum + result % (maximum+1 - minimum)
    return result1



if quantum_computer == "IBMQ": 
    api_key = None
    try:
        IBMQ.load_account()
    except Exception as e:
        api_key = st.sidebar.text_input("Enter IBMQ API Key")
        if api_key != None:
            IBMQ.save_account(api_key,overwrite=True)
            IBMQ.load_account()          
    provider = IBMQ.get_provider(hub='ibm-q')
    device = st.sidebar.selectBox("Select Quantum Device",[str(each) for each in provider.backends()])
    backend = provider.get_backend(device)
    if device == "ibmq_qasm_simulator":
        num_q = 32
    else:
        num_q = 5
    minimum = st.sidebar.number_input("Minimum Random Number",value=0)
    maximum = st.sidebar.number_input("Maximum Random Number",min_value=minimum+1,value=minimum+1)


num_rand_numbers = st.sidebar.number_input("Number of Random Numbers to be Generated",min_value=1,value=1)

            
def display_result(result1):
    if 'result1' in locals():
        st.markdown(f"<h2 style='text-align: center; color: black;'>Sampling {num_rand_numbers} random number between {minimum} and {maximum}: {result1}</h2>",unsafe_allow_html=True)
    


if st.sidebar.button("Generate Random Number"):
    if num_rand_numbers <1:
        st.markdown(f"<h3 style='text-align: center; color: black;'>Please enter number of random numbers to be generated 1 or greater then 1</h3>",unsafe_allow_html=True)
    else:
        if quantum_computer == "IBMQ":
            if num_rand_numbers==1:
                result1 = ibmq_qrng(minimum,maximum)
            else:
                result1 = []
                for i in range(num_rand_numbers):
                    result1.append(ibmq_qrng(minimum,maximum))
            display_result(result1)
else:
    st.markdown(f"<h3 style='text-align: center; color: black;'>Click on 'Generate Random Number' button</h3>",unsafe_allow_html=True)

要运行上述代码,您应该在系统上安装 IBMQ API 令牌 (https://quantum-computing.ibm.com/account) 和 python,并具有以下依赖项:

pip install qiskit streamlit

运行代码的命令:

streamlit run filename.py

当我运行应用程序时,我收到以下错误

enter image description here

qiskit 和 streamlit 有没有更好的异常处理方式?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)