杰瑞科技汇

Python显示connected却无法联网?

简单的打印输出

这是最直接的方式,无论你是否真正连接了什么,都只是在控制台打印出 "connected" 字符串。

# 这是最简单、最直接的方法
print("connected")

运行结果:

connected

网络连接检测

这是最常见的场景之一,比如检测你的 Python 脚本是否能成功连接到一个网站、API 或数据库,我们通常使用 try...except 结构来处理可能发生的连接错误。

示例1:检测是否能访问一个网站

我们可以使用 requests 库来尝试发送一个 HTTP 请求,如果成功,就说明网络是通的,并且可以访问该目标。

确保你已经安装了 requests 库:

pip install requests

使用以下代码:

import requests
url = "https://www.google.com"  # 或者任何你想要测试的网址
try:
    # 发送一个 GET 请求,设置一个超时时间(例如5秒)
    response = requests.get(url, timeout=5)
    # 如果响应状态码是 200,表示成功连接
    if response.status_code == 200:
        print("connected")
    else:
        print(f"Failed to connect. Status code: {response.status_code}")
except requests.exceptions.RequestException as e:
    # 如果发生任何连接相关的异常(如超时、DNS错误等)
    print(f"Not connected. Error: {e}")

代码解释:

  • import requests: 导入用于发送 HTTP 请求的库。
  • try...except: 这是错误处理的常用结构,Python 会先尝试执行 try 块里的代码,如果发生错误,就跳转到 except 块。
  • requests.get(): 尝试向指定 URL 发送一个 GET 请求。
  • timeout=5: 设置一个5秒的超时,如果5秒内没有收到响应,程序会抛出 Timeout 异常,避免无限等待。
  • response.status_code == 200: HTTP 状态码 200 表示 "OK",即请求成功。
  • requests.exceptions.RequestException: 这是 requests 库中所有异常的基类,可以捕获几乎所有网络连接问题。

数据库连接检测

当你需要连接数据库(如 MySQL, PostgreSQL, SQLite 等)时,通常会先尝试建立一个连接,如果成功,就打印 "connected"。

示例2:连接 SQLite 数据库

SQLite 是 Python 的内置数据库,无需额外安装驱动,非常适合演示。

import sqlite3
# 数据库文件名
db_file = "my_database.db"
try:
    # 尝试连接到数据库
    # 如果文件不存在,sqlite3 会自动创建一个
    connection = sqlite3.connect(db_file)
    # 如果连接成功,执行一些操作(可选)
    cursor = connection.cursor()
    cursor.execute("SELECT sqlite_version();")
    version = cursor.fetchone()
    print(f"Successfully connected to SQLite. Version: {version[0]}")
    # 不要忘记关闭连接
    connection.close()
except sqlite3.Error as e:
    # 如果连接或执行 SQL 时出错
    print(f"Not connected to SQLite. Error: {e}")

代码解释:

  • import sqlite3: 导入 Python 内置的 SQLite 模块。
  • sqlite3.connect(db_file): 尝试连接到指定的数据库文件,如果成功,它会返回一个连接对象。
  • connection.cursor(): 创建一个游标对象,用于执行 SQL 命令。
  • sqlite3.Error: 捕获所有与 SQLite 相关的错误。

示例3:连接 MySQL 数据库

对于 MySQL,你需要安装 mysql-connector-python 驱动。

首先安装驱动:

pip install mysql-connector-python

然后使用以下代码:

import mysql.connector
from mysql.connector import Error
try:
    # 尝试连接到 MySQL 数据库
    connection = mysql.connector.connect(
        host='localhost',      # 数据库主机地址
        database='your_database', # 数据库名称
        user='your_username',   # 数据库用户名
        password='your_password' # 数据库密码
    )
    if connection.is_connected():
        db_info = connection.get_server_info()
        print(f"Successfully connected to MySQL Server version {db_info}")
        # 可以在这里执行其他数据库操作...
except Error as e:
    print(f"Error while connecting to MySQL: {e}")
finally:
    # 确保连接被关闭
    if 'connection' in locals() and connection.is_connected():
        connection.close()
        print("MySQL connection is closed.")

硬件或串口连接检测

如果你正在与硬件(如 Arduino、树莓派的传感器等)通过串口通信,可以使用 pyserial 库。

首先安装库:

pip install pyserial

示例代码(检测是否存在串口设备):

import serial
# 尝试打开一个串口,COM3 是 Windows 下的常见端口,/dev/ttyUSB0 是 Linux 下的常见端口
# 你需要根据你的设备修改这个端口名
port_name = 'COM3' 
try:
    # 打开串口,设置波特率
    ser = serial.Serial(port_name, 9600, timeout=1)
    # 检查串口是否真的打开了
    if ser.is_open:
        print(f"connected to {ser.name}")
        # 在这里可以发送或接收数据...
        # ser.write(b'Hello') # 发送数据
        # ser.readline()      # 读取一行数据
        # 使用完毕后关闭串口
        ser.close()
except serial.SerialException as e:
    print(f"Not connected. Error: {e}")

场景 推荐方法 关键库/模块 核心逻辑
简单打印 print("connected") 直接输出字符串到控制台。
网络连接 try...except + requests.get() requests 尝试发送 HTTP 请求,捕获异常。
数据库连接 try...except + connect() sqlite3, mysql-connector-python 尝试建立数据库连接,捕获特定异常。
串口连接 try...except + serial.Serial() pyserial 尝试打开串口,捕获串口异常。

选择哪种方法取决于你想要连接的目标,核心思想都是尝试建立连接,如果成功则打印 "connected",如果失败则捕获错误并打印 "Not connected"

分享:
扫描分享到社交APP
上一篇
下一篇