歡迎光臨
每天分享高質量文章

Python黑科技:FuckIt.py

導讀:說起 Python 強大的地方,你可能想到是它的優雅、簡潔、開發速度快,社區活躍度高。但真正使得這門語言經久不衰的一個重要原因是它的無所不能,因為社區有各種各樣的第三庫,使得我們用Python實現一個東西實在是太簡單了,你經常會看到幾行代碼實現爬蟲,10行代碼實現人臉識別,雖然有些誇張,但確實就是有這樣的庫幫你把所有的繁文縟節全部封裝了,最後給你開放一個優雅的 API。

作者:志軍100

來源:Python之禪(ID:VTtalk)

今天給你推薦的這個庫叫 “FuckIt.py”,名字一看就是很黃很暴力的那種,作者是這樣介紹它的:

FuckIt.py uses state-of-the-art technology to make sure your Python code runs whether it has any right to or not. Some code has an error? Fuck it.

FuckIt.py 使用了最先進的技術能夠使你的代碼不管裡面有什麼樣的錯誤,你只管 FuckIt,程式就能“正常”執行,兵來將擋水來土掩。

還是先來看個例子怎麼使用的吧。

安裝:

pip install fuckit

假設有一個標的檔案:broke.py

def f():
    broken_code
    print('fuckit chaining works')

for

let's just assume this is a big module of shitty code.

x = y
y = x
1 / 0 # Oh shhhiiiiiii

var = "Are you proud of what you've done?"

broke.py 中有幾處明顯的錯誤,包括語法錯誤,變數 broken_code 沒有被定義,還有0當作被除數。

如果直接 import broke 肯定會報錯:

>>> import broke
 File "broke.py", line 5
   for
     ^
SyntaxError: invalid syntax

這時你可以使用 fuckit 將 broke 匯入進來。

>>> import fuckit
>>> fuckit("broke")
'broke'

from ‘broke.py’>
>>> broke
‘broke’ from ‘broke.py’>

呼叫函式 f 的時候也會報錯:

>>> broke.f()
NameError: global name 'broken_code' is not defined

你可以使用鏈式 fuckit 來呼叫這個有問題的函式:

>>> fuckit(broke).f()
fuckit chaining works

或者
>>> fuckit(fuckit("broke")).f()
fuckit chaining works

除此之外,fuckit 還可以作為裝飾器和背景關係管理器來使用。

裝飾函式:

>>> @fuckit
... def broken_function():
...    non_existant_variable # Let's create a NameError
...    return 'Function decorator works'
...
>>> print(broken_function())
None

裝飾類:

>>> @fuckit
... class BrokenClass(object):
...    def f(self):
...        self.black_hole = 1 / 0
...        return 'Class decorator works'
...
>>> print(BrokenClass().f())
None

背景關係管理器:

>>> with fuckit:
...    print('Context manager works')
...    raise RuntimeError()
...

等價於:

try:
    print('Context manager works')
except RuntimeError:
   pass

看到這裡,是不是感覺 fuckit 很暴力,那麼它能用在什麼場景?個人認為這個庫很雞肋,因為你的代碼不應該容忍這些錯誤的出現,如果出現了錯誤應該立馬修複才是,但有一種可能的使用場景是你剛接手一份超複雜的代碼,裡面各種看不懂的代碼,而這些操蛋的代碼時不時出現一個錯誤,而你又沒法駕馭它的時候,你就用 fuckit 吧。

fuckit的原始碼不到200行,好奇的你是不是很想知道它怎麼實現了,用了什麼黑科技?訪問專案地址:

https://github.com/ajalt/fuckitpy

更多精彩


在公眾號後臺對話框輸入以下關鍵詞

查看更多優質內容!


PPT | 報告 | 讀書 | 書單

Python | 機器學習 | 深度學習 | 神經網絡

區塊鏈 | 揭秘 | 乾貨 | 數學

猜你想看

Q: 這個能解決你的問題嗎

歡迎留言與大家分享

覺得不錯,請把這篇文章分享給你的朋友

轉載 / 投稿請聯繫:[email protected]

更多精彩,請在後臺點擊“歷史文章”查看

赞(0)

分享創造快樂