最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python使用kombu連接信息中包含#號問題排查方式

 更新時(shí)間:2024年12月24日 09:31:39   作者:Chengdu.S  
文章描述了在部署Python項(xiàng)目到生產(chǎn)環(huán)境時(shí)遇到的一個(gè)錯(cuò)誤,即端口號無法正確轉(zhuǎn)換為整數(shù)值,該錯(cuò)誤在測試環(huán)境和本地調(diào)試中沒有出現(xiàn),但在生產(chǎn)環(huán)境中才出現(xiàn),通過分析錯(cuò)誤信息和代碼,作者發(fā)現(xiàn)問題出在URL解析過程中,特別是在處理包含特殊字符(如#號)的URL時(shí)

python 項(xiàng)目部署生產(chǎn)環(huán)境遇到一個(gè)錯(cuò)誤問題:

raise ValueError(f"Port could not be cast to integer value as {port!r}") ValueError: Port could not be cast to integer value as 'guest

測試環(huán)境和本地調(diào)試都沒有問題,但是到生產(chǎn)之后就有問題,本章復(fù)現(xiàn)有問題的mq連接配置的導(dǎo)致的錯(cuò)誤信息,記錄問題排查過程

版本信息

框架版本
python3.11.7
kombu5.3.4

環(huán)境搭建

python 虛擬環(huán)境

Python 虛擬環(huán)境(Virtual Environment)是一個(gè)隔離的 Python 解釋器環(huán)境,它允許你為每個(gè) Python 項(xiàng)目安裝其特定的依賴包,而不會(huì)干擾到全局 Python 環(huán)境或其他項(xiàng)目。

這樣,你可以確保每個(gè)項(xiàng)目都有其獨(dú)立的、一致的依賴環(huán)境,避免了版本沖突和依賴混亂的問題。

Python 中有幾個(gè)流行的工具用于創(chuàng)建和管理虛擬環(huán)境,其中最常用的是 venv 和 virtualenv

venv 創(chuàng)建 python 虛擬環(huán)境

python -m venv .venv

執(zhí)行該命令之后,會(huì)創(chuàng)建一個(gè)虛擬的環(huán)境,產(chǎn)生 .venv文件夾, 目錄結(jié)構(gòu)如下

激活虛擬環(huán)境

.venv\Scripts\activate

激活虛擬環(huán)境之后,文件夾前面會(huì)有括號顯示虛擬環(huán)境的名稱

退出虛擬環(huán)境

deactivate

虛擬環(huán)境下查看python、pip版本

查詢pip 配置信息

(.venv) F:\Python\mq>pip config list
global.index-url='http://mirrors.aliyun.com/pypi/simple/'
install.trusted-host='mirrors.aliyun.com'

安裝依賴

編寫 requirements.txt

kombu==5.3.4

在虛擬環(huán)境里面安裝依賴

pip install -r requirements.txt

問題復(fù)現(xiàn)以及問題排查

1.消息發(fā)布端 hello_publisher.py

from __future__ import annotations

import datetime

from kombu import Connection

with Connection('amqp://guest:guest#2024@localhost:5672//') as conn:
    simple_queue = conn.SimpleQueue('simple_queue')
    message = f'helloworld, sent at {datetime.datetime.today()}'
    simple_queue.put(message)
    print(f'Sent: {message}')
    simple_queue.close()

2.在虛擬環(huán)境運(yùn)行代碼

出現(xiàn)如下報(bào)錯(cuò)信息

(.venv) F:\Python\mq>python hello_publisher.py
Traceback (most recent call last):
  File "F:\Python\mq\hello_publisher.py", line 7, in <module>
    with Connection('amqp://guest:guest#2024@localhost:5672//') as conn:
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "F:\Python\mq\.venv\Lib\site-packages\kombu\connection.py", line 203, in __init__
    url_params = parse_url(hostname)
                 ^^^^^^^^^^^^^^^^^^^
  File "F:\Python\mq\.venv\Lib\site-packages\kombu\utils\url.py", line 38, in parse_url
    scheme, host, port, user, password, path, query = _parse_url(url)
                                                      ^^^^^^^^^^^^^^^
  File "F:\Python\mq\.venv\Lib\site-packages\kombu\utils\url.py", line 70, in url_to_parts
    parts.port,
    ^^^^^^^^^^
  File "E:\Anaconda\Lib\urllib\parse.py", line 182, in port
    raise ValueError(f"Port could not be cast to integer value as {port!r}")
ValueError: Port could not be cast to integer value as 'guest'

看到報(bào)錯(cuò)的堆棧信息,首先定位到代碼行

File "F:\Python\mq\.venv\Lib\site-packages\kombu\utils\url.py", line 70 

在此處加一個(gè)斷點(diǎn),調(diào)試一下(生產(chǎn)服務(wù)不能調(diào)試就print輸出一下信息)

3.調(diào)試出問題的代碼

報(bào)錯(cuò)的代碼方法如下

def url_to_parts(url):
    # type: (str) -> urlparts
    """Parse URL into :class:`urlparts` tuple of components."""
    scheme = urlparse(url).scheme
    schemeless = url[len(scheme) + 3:]
    # parse with HTTP URL semantics
    parts = urlparse('http://' + schemeless)
    path = parts.path or ''
    path = path[1:] if path and path[0] == '/' else path
    return urlparts(
        scheme,
        unquote(parts.hostname or '') or None,
        parts.port,
        unquote(parts.username or '') or None,
        unquote(parts.password or '') or None,
        unquote(path or '') or None,
        dict(parse_qsl(parts.query)),
    )

parts.port 獲取的值從 urlparse 方法中解析出來的

執(zhí)行完 urlparse 方法之后獲取到的數(shù)值如下

port 的解析在 urlparse 這一步出了問題,重點(diǎn)來看看這個(gè)方法的邏輯

經(jīng)過調(diào)試發(fā)現(xiàn)問題出在切割方法里面 urllib.parse.urlsplit,具體處理出問題代碼在如下片段

鏈接中有 # 號導(dǎo)致切割之后端口號錯(cuò)位未獲取到

去除鏈接中的#號的正常解析的數(shù)據(jù)如下

鏈接中沒有 # 號之后,端口可以正常解析了

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • python日志通過不同的等級打印不同的顏色(示例代碼)

    python日志通過不同的等級打印不同的顏色(示例代碼)

    這篇文章主要介紹了python日志通過不同的等級打印不同的顏色,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • 用python讀寫excel的方法

    用python讀寫excel的方法

    這篇文章主要介紹了用python讀寫excel的方法,涉及xlrd模塊與xlwt模塊的應(yīng)用,具有一定的學(xué)習(xí)借鑒價(jià)值,需要的朋友可以參考下
    2014-11-11
  • Pytorch中關(guān)于inplace的操作

    Pytorch中關(guān)于inplace的操作

    這篇文章主要介紹了Pytorch中關(guān)于inplace的操作方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • python使用pynput庫操作、監(jiān)控你的鼠標(biāo)和鍵盤

    python使用pynput庫操作、監(jiān)控你的鼠標(biāo)和鍵盤

    這篇文章主要介紹了python使用pynput庫操作、監(jiān)控你的鼠標(biāo)和鍵盤,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下
    2021-03-03
  • 一篇文章帶你了解python字典基礎(chǔ)

    一篇文章帶你了解python字典基礎(chǔ)

    這篇文章主要介紹了Python字典及字典基本操作方法,結(jié)合實(shí)例形式詳細(xì)分析了Python字典的概念、創(chuàng)建、格式化及常用操作方法與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2021-08-08
  • 簡單的Apache+FastCGI+Django配置指南

    簡單的Apache+FastCGI+Django配置指南

    這篇文章主要介紹了簡單的Apache+FastCGI+Django配置指南,這也是Python上最流行的web框架Django的最流行搭配環(huán)境:)需要的朋友可以參考下
    2015-07-07
  • python之PyQt按鈕右鍵菜單功能的實(shí)現(xiàn)代碼

    python之PyQt按鈕右鍵菜單功能的實(shí)現(xiàn)代碼

    這篇文章主要介紹了python PyQt按鈕右鍵菜單功能的實(shí)現(xiàn)代碼,代碼簡單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-08-08
  • python使用心得之獲得github代碼庫列表

    python使用心得之獲得github代碼庫列表

    最近接了個(gè)項(xiàng)目,要求獲得github的repo的api,度娘了一下,有不少文章介紹,總結(jié)了本文,分享給大家并附上代碼
    2014-06-06
  • Python如何導(dǎo)出導(dǎo)入所有依賴包詳解

    Python如何導(dǎo)出導(dǎo)入所有依賴包詳解

    在Python中我們在項(xiàng)目中會(huì)用到各種庫,自帶的自然不必再說,這篇文章主要給大家介紹了關(guān)于Python如何導(dǎo)出導(dǎo)入所有依賴包的相關(guān)資料,需要的朋友可以參考下
    2021-06-06
  • python dict remove數(shù)組刪除(del,pop)

    python dict remove數(shù)組刪除(del,pop)

    我們在用數(shù)組列表做刪除的時(shí)候,可能選擇2個(gè)方法,一個(gè)是del,一個(gè)是pop方法
    2013-03-03

最新評論

惠来县| 上高县| 永登县| 河北省| 高州市| 伊宁县| 成安县| 敖汉旗| 杨浦区| 南阳市| 蓬莱市| 蓬安县| 什邡市| 沐川县| 广水市| 新密市| 兴化市| 连山| 哈尔滨市| 长泰县| 无为县| 巢湖市| 克拉玛依市| 太仓市| 山阴县| 丰城市| 克山县| 庄河市| 南溪县| 丹阳市| 潼关县| 高州市| 高安市| 错那县| 玉山县| 双城市| 平江县| 台北县| 固镇县| 易门县| 文水县|