亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python使用kombu連接信息中包含#號(hào)問(wèn)題排查方式

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

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

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

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

版本信息

框架版本
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)境,避免了版本沖突和依賴混亂的問(wè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ì)有括號(hào)顯示虛擬環(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

問(wèn)題復(fù)現(xiàn)以及問(wè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)試出問(wèn)題的代碼

報(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 方法中解析出來(lái)的

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

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

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

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

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

鏈接中沒(méi)有 # 號(hào)之后,端口可以正常解析了

總結(jié)

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

相關(guān)文章

  • Python根據(jù)輸入?yún)?shù)計(jì)算結(jié)果的實(shí)例方法

    Python根據(jù)輸入?yún)?shù)計(jì)算結(jié)果的實(shí)例方法

    在本篇文章里小編個(gè)大家整理了一篇關(guān)于Python根據(jù)輸入?yún)?shù)計(jì)算結(jié)果的實(shí)例方法,有興趣的朋友們可以跟著學(xué)習(xí)參考下。
    2021-08-08
  • 對(duì)python中的iter()函數(shù)與next()函數(shù)詳解

    對(duì)python中的iter()函數(shù)與next()函數(shù)詳解

    今天小編就為大家分享一篇對(duì)python中的iter()函數(shù)與next()函數(shù)詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-10-10
  • Python中new方法的詳解

    Python中new方法的詳解

    今天小編就為大家分享一篇關(guān)于Python中new方法的詳解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-01-01
  • python flask框架快速入門

    python flask框架快速入門

    Flask 本身相當(dāng)于一個(gè)內(nèi)核,其他幾乎所有的功能都要用到擴(kuò)展,都需要用第三方的擴(kuò)展來(lái)實(shí)現(xiàn),本文給大家分享如何快速入門python flask框架,感興趣的朋友一起看看吧
    2021-05-05
  • python dir函數(shù)快速掌握用法技巧

    python dir函數(shù)快速掌握用法技巧

    在本篇文章里小編給大家整理的是一篇關(guān)于python dir函數(shù)快速掌握用法技巧,有興趣的朋友們可以學(xué)習(xí)參考下。
    2020-12-12
  • python連接手機(jī)自動(dòng)搜集螞蟻森林能量的實(shí)現(xiàn)代碼

    python連接手機(jī)自動(dòng)搜集螞蟻森林能量的實(shí)現(xiàn)代碼

    這篇文章主要介紹了python連接手機(jī)自動(dòng)搜集螞蟻森林能量的實(shí)現(xiàn)方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02
  • python如何生成textgrid文件

    python如何生成textgrid文件

    這篇文章主要介紹了python如何生成textgrid文件,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-07-07
  • Python 遍歷循環(huán)詳細(xì)

    Python 遍歷循環(huán)詳細(xì)

    這篇文章主要介紹的是Python 遍歷循環(huán),遍歷循環(huán)可理解為從遍歷結(jié)構(gòu)中逐一提取元素,放在循環(huán)變量中,對(duì)于所提取的每個(gè)元素執(zhí)行一次語(yǔ)句塊。由保留字for和in組成,完整遍歷所有元素后結(jié)束每次循環(huán),所獲得元素放入循環(huán)變量,并執(zhí)行一次語(yǔ)句塊,下面就來(lái)看文章介紹
    2021-10-10
  • Python?Opencv實(shí)現(xiàn)圖片切割處理

    Python?Opencv實(shí)現(xiàn)圖片切割處理

    這篇文章主要為大家詳細(xì)介紹了Python?Opencv實(shí)現(xiàn)圖片切割處理,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • python多進(jìn)程并行代碼實(shí)例

    python多進(jìn)程并行代碼實(shí)例

    這篇文章主要介紹了python多進(jìn)程并行代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09

最新評(píng)論