導讀:說起 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
呼叫函式 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: 這個能解決你的問題嗎?
歡迎留言與大家分享
覺得不錯,請把這篇文章分享給你的朋友
轉載 / 投稿請聯絡:baiyu@hzbook.com
更多精彩,請在後臺點選“歷史文章”檢視