日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

启动ipython出错_python-在异常情况下启动IPython shell

發(fā)布時(shí)間:2025/4/5 python 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 启动ipython出错_python-在异常情况下启动IPython shell 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

python-在異常情況下啟動(dòng)IPython shell

當(dāng)我的程序運(yùn)行引發(fā)異常的行時(shí),是否可以啟動(dòng)IPython Shell或提示?

我對(duì)引發(fā)異常的上下文,變量,范圍(和子范圍)最感興趣。 類似于Visual Studio的調(diào)試,當(dāng)引發(fā)異常但未被任何人捕獲時(shí),Visual Studio將停止并為我提供調(diào)用堆棧以及每個(gè)級(jí)別存在的變量。

您是否認(rèn)為有辦法使用IPython獲得類似的東西?

編輯:啟動(dòng)IPython時(shí)的-pdb選項(xiàng)似乎并沒有達(dá)到我想要的功能(或者也許我不知道如何正確使用它,這完全有可能)。 我運(yùn)行以下腳本:

def func():

z = 2

g = 'b'

raise NameError("This error will not be caught, but IPython still"

"won't summon pdb, and I won't be able to consult"

"the z or g variables.")

x = 1

y = 'a'

func()

使用命令:

ipython -pdb exceptionTest.py

當(dāng)出現(xiàn)錯(cuò)誤時(shí),它將停止執(zhí)行,但是會(huì)給我一個(gè)IPython提示,在這里我可以訪問腳本的全局變量,但不能訪問函數(shù)func的局部變量。 僅當(dāng)我在ipython中直接鍵入會(huì)導(dǎo)致錯(cuò)誤的命令時(shí)(即func)才調(diào)用-pdb。

我不一定需要使用-pdb,我只想訪問func中的變量。

編輯2:已經(jīng)有一段時(shí)間了,IPython的-pdb選項(xiàng)現(xiàn)在可以按照我的意愿工作。 這意味著當(dāng)我引發(fā)異常時(shí),我可以返回func的范圍,并毫無問題地讀取其變量z和g。 即使沒有設(shè)置-pdb選項(xiàng),也可以在交互模式下運(yùn)行IPython,然后在程序錯(cuò)誤退出后調(diào)用魔術(shù)函數(shù)%debug-這也會(huì)使您進(jìn)入具有所有作用域的交互式ipdb提示符。

10個(gè)解決方案

24 votes

IPython v0.13的更新:

import sys

from IPython.core import ultratb

sys.excepthook = ultratb.FormattedTB(mode='Verbose',

color_scheme='Linux', call_pdb=1)

Adam Greenhall answered 2020-06-16T16:45:55Z

19 votes

正在做:

ipython --pdb -c "%run exceptionTest.py"

在IPython初始化之后啟動(dòng)腳本,您將進(jìn)入正常的IPython + pdb環(huán)境。

rcoup answered 2020-06-16T16:46:19Z

12 votes

ipdb將IPython功能集成到pdb中。 在發(fā)生異常處理后,我使用以下代碼將應(yīng)用程序扔到IPython調(diào)試器中。

import sys, ipdb, traceback

def info(type, value, tb):

traceback.print_exception(type, value, tb)

ipdb.pm()

sys.excepthook = info

jon answered 2020-06-16T16:46:40Z

7 votes

@snapshoe的答案不適用于較新版本的IPython。

但是這樣做:

import sys

from IPython import embed

def excepthook(type, value, traceback):

embed()

sys.excepthook = excepthook

bcoughlan answered 2020-06-16T16:47:04Z

6 votes

您可以嘗試以下方法:

from ipdb import launch_ipdb_on_exception

def main():

with launch_ipdb_on_exception():

# The rest of the code goes here.

[...]

Sardathrion answered 2020-06-16T16:47:24Z

4 votes

您可以執(zhí)行以下操作:

import sys

from IPython.Shell import IPShellEmbed

ipshell = IPShellEmbed()

def excepthook(type, value, traceback):

ipshell()

sys.excepthook = excepthook

請(qǐng)參閱sys.excepthook和嵌入IPython。

snapshoe answered 2020-06-16T16:47:49Z

3 votes

@Adam的工作就像一個(gè)魅力,除了IPython加載緩慢(在我的計(jì)算機(jī)上為800ms)之外。 在這里,我有一個(gè)技巧可以使負(fù)載變懶。

class ExceptionHook:

instance = None

def __call__(self, *args, **kwargs):

if self.instance is None:

from IPython.core import ultratb

self.instance = ultratb.FormattedTB(mode='Verbose',

color_scheme='Linux', call_pdb=1)

return self.instance(*args, **kwargs)

sys.excepthook = ExceptionHook()

現(xiàn)在我們不需要一開始就等待。 僅當(dāng)程序崩潰時(shí),才會(huì)導(dǎo)入IPython。

Ray answered 2020-06-16T16:48:14Z

2 votes

該手冊(cè)頁說,iPython具有python -m pdb pythonscript.py選項(xiàng),該選項(xiàng)將在命令行中傳遞,以啟動(dòng)iPython捕獲未捕獲的異常。 您是否在尋找更多?

編輯:python -m pdb pythonscript.py可以啟動(dòng)pdb。 雖然不確定與iPython類似。 如果您正在尋找程序異常退出的堆棧跟蹤和常規(guī)驗(yàn)尸,這應(yīng)該可以工作。

vpit3833 answered 2020-06-16T16:48:40Z

1 votes

您是否真的想在每個(gè)異常點(diǎn)打開一個(gè)pdb會(huì)話? (因?yàn)槲艺J(rèn)為從ipython打開的pdb會(huì)話與在普通shell中打開的會(huì)話相同)。 如果真是這樣,這是竅門:[http://code.activestate.com/recipes/65287-automatically-start-the-debugger-on-an-exception/]

dirksen answered 2020-06-16T16:49:00Z

1 votes

如果您既要獲取回溯信息,又要在異常發(fā)生時(shí)打開帶有環(huán)境的IPython Shell:

def exceptHook(*args):

'''A routine to be called when an exception occurs. It prints the traceback

with fancy formatting and then calls an IPython shell with the environment

of the exception location.

'''

from IPython.core import ultratb

ultratb.FormattedTB(call_pdb=False,color_scheme='LightBG')(*args)

from IPython.terminal.embed import InteractiveShellEmbed

import inspect

frame = inspect.getinnerframes(args[2])[-1][0]

msg = 'Entering IPython console at {0.f_code.co_filename} at line {0.f_lineno}'.format(frame)

savehook = sys.excepthook # save the exception hook

InteractiveShellEmbed()(msg,local_ns=frame.f_locals,global_ns=frame.f_globals)

sys.excepthook = savehook # reset IPython's change to the exception hook

import sys

sys.excepthook = exceptHook

請(qǐng)注意,有必要從回溯引用的最后一幀(arg [2])中提取名稱空間信息。

bht answered 2020-06-16T16:49:24Z

總結(jié)

以上是生活随笔為你收集整理的启动ipython出错_python-在异常情况下启动IPython shell的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久精品中文字幕 | 土耳其xxxx性hd极品 | 国产卡一卡二 | 污污视频网站在线免费观看 | 久久男人天堂 | 成人午夜精品视频 | 日韩一级免费观看 | 国内精品久久久久久久 | 青青草免费在线观看 | 日日夜夜爱爱 | 国产农村av| 黄色自拍视频 | 95精品视频 | 高潮爽爆喷水h | 国产福利视频一区 | 日本老妇高潮乱hd | 成人av网站在线播放 | 精品久久视频 | 女生高潮视频在线观看 | 岛国av网址| 成年人在线视频免费观看 | 末发成年娇小性xxxxx | 国产成人在线免费观看视频 | 一区二区日韩精品 | 免费观看的黄色网址 | 成人国产精品免费观看动漫 | 波多野结衣免费看 | 9cao| av久久久 | 日韩午夜小视频 | 精品人妻人人做人人爽 | 久草网视频在线观看 | 黄色网址在线免费看 | 色噜噜综合网 | 日韩在线色 | 性欧美18—19sex性高清 | 和美女啪啪 | 九九热在线播放 | 久久色在线视频 | av美女在线观看 | 综合亚洲视频 | 欧美成人专区 | 超碰丝袜 | 色哟哟视频| 日本精品在线播放 | 91视频合集| 亚洲免费黄色网址 | 可以免费看的黄色网址 | 国产三级午夜理伦三级 | 日韩高清二区 | 三上悠亚一区二区在线观看 | 欧美爱爱爱 | 在线视频久 | 黄色小视频国产 | 欧美人喂奶吃大乳 | 一区二区在线免费观看视频 | 国产精品无码久久久久高潮 | 欧美日韩亚洲综合 | 少妇毛片一区二区三区粉嫩av | 久草免费在线视频观看 | 国产3p露脸普通话对白 | 亚洲综合大片69999 | 精品动漫一区二区三区的观看方式 | 人妻偷人精品一区二区三区 | 欧美大屁股熟妇bbbbbb | 超碰97在线资源 | 欧美激情999| 日本公妇乱淫免费视频一区三区 | 国产麻豆影视 | 亚洲最新偷拍 | 亚洲精品成人电影 | 年代下乡啪啪h文 | 爱爱免费网址 | 国产精品美女www爽爽爽 | 99热这里| 91手机在线播放 | 国产亚洲精品aaaaaaa片 | 日本三级免费 | 最新高清无码专区 | 丰满熟女人妻一区二区三区 | 亚洲狠狠丁香婷婷综合久久久 | 中文字幕在线观看视频一区 | 北条麻妃av在线 | 天天操天天操天天操天天 | 欧美 日韩 国产 精品 | 成人做爰免费视频免费看 | 国产毛片视频网站 | 一区二区三区视频免费 | 日韩精品专区 | 爽爽爽av | 日韩成人一级片 | 久久久无码18禁高潮喷水 | 一对一色视频聊天a | 男女爱爱动态图 | 色女人综合| 99精品视频在线 | 欧美成人片在线观看 | 成人毛片软件 | 伊人动漫|