我是一名Java开发人员,他是Python的新手,我将Java类重写为Python类.我试图尽可能地模仿Python类中原始类的流程.Java类有几行,
if(condition)
throw new Exception("text here")
Run Code Online (Sandbox Code Playgroud)
我一直在查看Python文档中的异常,并且无法找到与Java语法等效的Python.
我已经raise Exception("text here")通过阅读这个StackOverflow帖子尝试了一些东西(我认为很接近),但似乎这是在try except块中使用并且会导致从try块跳转到except块; 而我正试图避免try except阻塞而只是抛出异常.
我认为可行的解决方案是这样的,
try:
if(condition):
raise Exception("text here")
except:
...
Run Code Online (Sandbox Code Playgroud)
但我想知道是否有一种与 Java 方法更密切相关的方法,以便我可以尽可能多地维护流程(让它们看起来相似).
在打开该目录中的文件之前,我试图在目录不存在时引发错误。根据这个回复,我应该为我的问题使用最具体的 Exception 构造函数,我认为是NotADirectoryError. 但是运行下面的代码我得到NameError: global name 'NotADirectoryError' is not defined. 在此先感谢您的帮助!
import os
if not os.path.isdir(baselineDir):
raise NotADirectoryError("No results directory for baseline.")
Run Code Online (Sandbox Code Playgroud)
如果有更好的方法来做到这一点,请提出建议,谢谢。
我的 python 代码中有一个重试机制。如果所有尝试都以某种方式失败,我想提出例外
像这样的东西:
last_exc = None
for i in range(3):
try:
raise Exception(i)
except Exception as e:
last_exc = e
else:
raise last_exc
Run Code Online (Sandbox Code Playgroud)
但问题是我没有在日志中得到确切的回溯。我刚刚收到以下消息:
Traceback (most recent call last):
File "snippet.py", line 8, in <module>
raise e
Exception: 2
Run Code Online (Sandbox Code Playgroud)
我期待raise Exception(i)(第 4 行)作为异常中的回溯。该行为仅适用于 python 2.7。
如何设置我正在引发的异常(在上一个异常中引发)的确切回溯?
我想知道是否有一种方法以编程方式停止python脚本执行而不像我们使用此代码一样杀死进程:
import sys
sys.exit()
Run Code Online (Sandbox Code Playgroud)
这将是相当于Ctrl + c的代码
我没有直接调用异常,而是看到它被子类化,其中没有任何内容或语句pass。它如何帮助 Python 在内部以这种方式子类化基类?它会改变命名空间或签名吗?如何?
class ACustomException(Exception):
pass
class BCustomException(Exception):
pass
Run Code Online (Sandbox Code Playgroud) 基本上,我想为针对我的 slackbot 的以下任何命令保留打开选项:
@torbot
@torbot [命令]
@torbot [命令] [参数]
下面是我现在一直在用的,但看起来很丑。根据我的经验,通常当某件事看起来很难看时,这意味着可能有一种更直观的方法来完成同样的事情。
class TorbotCommand(object):
def __init__(self, input):
self.__input = input
# TODO: There has to be a better way..
try:
self.__command_string = self.__input['text'].split(' ', 1)[1].strip().lower()
except:
self.__command_string = None
pass
try:
self.__command = self.__command_string.split(' ', 1)[0]
except:
self.__command = None
pass
try:
self.__text = self.__command_string.split(' ', 1)[1]
except:
self.__text = None
pass
def getCommand(self): return self.__command
def getText(self): return self.__text
def getInput(self): return self.__input
Run Code Online (Sandbox Code Playgroud) 如果我有一个表达式1/0,显然它会出错:
try:
1/0
except ZeroDivisionError as err:
print(err) # this prints: division by zero
Run Code Online (Sandbox Code Playgroud)
第二次尝试,取而代之的1/0是raise ZeroDivisionError......
try:
raise ZeroDivisionError
except ZeroDivisionError as err:
print(err) # this prints: (nothing)
Run Code Online (Sandbox Code Playgroud)
它什么都不打印.是不是来自异常raise,与一般表达相同?
另外,如何更清楚地理解这种差异?
我正在学习 python 教程,然后来到了一个介绍错误的部分(熟悉错误,不要在出现问题时感到害怕等)。在深入研究了一些错误之后,我看到了“引发错误”和“引发异常”这两个词。
这是特定功能吗?如果是这样,“引发错误”有什么好处?在可视化这一点时,似乎执行代码时产生的错误在运行时被提升到其他代码之上......有人可以帮我把它拼凑起来吗?
提前致谢!
我正在研究扣除金额函数,如果值中 a < b,它应该会引发运行时错误:
这是我的代码
def deduct_amount(a, b):
try:
b - a < 0
except ValueError:
print(a + ' can not be less than' + b)
else:
c = a - b
return c
deduct_amount(8, 12)
Run Code Online (Sandbox Code Playgroud)
我知道我的 try 语句是错误的。如果 a 小于 b,如何抛出值错误