Python 版本:2.7。操作系统:Windows 10 64 位。
注意:我找到了一种解决下面描述的问题的方法,该方法不使用 try/except/else 语句。我问下面的问题只是因为我很好奇为什么代码的行为方式如此,以及是否有办法使用 try/except/else 来做我想做的事情。
我有一个名为 的文件blah.py,其中包含以下代码:
import os
def makeFolder(dirName, num = 0):
try:
os.mkdir(dirName + '_' + str(num)) #error if argument of os.mkdir already exists
except:
makeFolder(dirName, num = num + 1)
else:
return dirName + '_' + str(num)
Run Code Online (Sandbox Code Playgroud)
现在我转到 Powershell,然后键入:
import blah
myStr = blah.makeFolder('myFolder')
print myStr
print type(myStr)
Run Code Online (Sandbox Code Playgroud)
它做我所期望的 - 创建了一个名为 myFolder_0 的文件夹,并打印myFolder_0和<type 'str'>. 现在,仍然在 Powershell 中,我输入:
myStr1 = blah.makeFolder('myFolder')
print myStr1
print type(myStr1)
Run Code Online (Sandbox Code Playgroud)
这次它创建了一个名为 …
下面是我的代码片段,我想知道的是,假设如果函数 main2() 由于某种原因抛出错误,我如何让我的异常在它中断之前再次运行相同的函数 3 次?
只是在这里补充一下,任何函数都可能会抛出错误(不仅仅是 main2()),而且我可能不仅有 3 个函数,还有更多函数
import numpy as np
def main():
np.load('File.csv')
def main1():
np.load('File1.csv')
def main2():
np.load('File2.csv')
for i in range(1, 10):
try:
main()
main2()
main3()
except Exception as e:
print e
else:
break
Run Code Online (Sandbox Code Playgroud) 假设以下代码:
try:
code_a
code_b
code_c
except:
pass
Run Code Online (Sandbox Code Playgroud)
如果在 中发生错误code_b,那么它将被 捕获except并且只会code_a运行。有没有办法确保code_c运行?
我想:
try:
code_a
except:
pass
try:
code_b
except:
pass
try:
code_c
except:
pass
Run Code Online (Sandbox Code Playgroud)
不是正确的方法。
我目前正在研究一个项目的伪代码,突然想到,虽然我有一种方法可以检查用户输入是否是严格的数字,但我不知道如何检查输入是否是严格按字母顺序排列的。
例如:
def valueCheck_Int(question):
while (True):
try:
return int(input(question))
except:
question = "That is not a valid integer, try again: "
def main():
userInput = valueCheck_Int("Enter an integer: ")
print(userInput)
main()
Run Code Online (Sandbox Code Playgroud)
这段代码检查用户的输入是否严格为数字,并且只会在用户输入整数之前中断循环。
有没有办法做到这一点,但字符串输入是按字母顺序排列的,根本没有数字?
我正在尝试从 JSON 文件中获取值并将其存储在 python 字典中。
我想为我提供的键中可用的值和那些不可用的值分配值,我想存储为“无”
我尝试了以下,
try:
dataDict['syn']= results['synonyms']
dataDict['reactivity']= results['crossReactivity']
dataDict['Temp']= results['storageTemp']
dataDict['catNum']= results['catalogNum']
dataDict['shipping']= results['shippingInstructions']
except KeyError as e:
dataDict[e.args[0]] = "None"
sa = f"""
synonyms: {dataDict['syn']}
crossReactivity: {dataDict['reactivity']}
storageTemp: {dataDict['Temp']}
catalogNum: {dataDict['catNum']}
shippingInstructions: {dataDict['shipping']}
"""
print (sa)
Run Code Online (Sandbox Code Playgroud)
我得到以下输出,
synonyms: None
crossReactivity:
storageTemp:
catalogNum:
shippingInstructions:
Run Code Online (Sandbox Code Playgroud)
如果 JSON 文件中的“同义词”不可用,则将“无”分配给 dataDict['syn'],但其他语句将被忽略。
如何执行其余的任务,而不必在单独的 try 和 except 中编写每个和所有内容?
我有一个按计划每分钟运行一次的函数。第一步是从 API 中提取数据。有时这有效,有时它超时。如果它有效,我想对数据做一堆事情然后保存它。如果它不起作用,我只想跳到函数的末尾而不做任何事情。所以这是它的工作原理:
def job():
try:
a = requests.get("API address that sometimes work and sometimes doesn't")
except:
print('connection error')
#a bunch of code that transforms the data and then saves it
Run Code Online (Sandbox Code Playgroud)
这是调度程序:
schedule.every().minute.at(":01").do(job)
while 1:
schedule.run_pending()
time.sleep(1)
Run Code Online (Sandbox Code Playgroud)
我可以通过将#a bunch of code线移到 try 中来实现我想要的,但是其他潜在的错误也将被捕获在“连接错误”中。
有没有办法让异常跳到函数的末尾?然后因为它在一分钟的调度程序上它只是稍后再试?
我知道它不是可重复的代码,但这很简单,没有必要。
这个库 X 有两个版本:7 和 8。
在版本 7 中,调用装饰器的回调resultcallback()并
在版本 8 中,回调被称为result_callback():
目前我有一个代码可以对 X 库的版本 7 执行类似的操作:
from x import x # Some sort of decorator library.
@x.resultcallback()
def process_pipeline(func, **kwargs):
with x.get_stream as fin:
func(fin)
Run Code Online (Sandbox Code Playgroud)
我的用户只想依赖其中一个版本,但两个版本都无法仅容纳版本 7 或仅容纳版本 8。
有没有办法在装饰器中执行 if-else 操作?
我可以做到这一点,但它真的很难看,而且如果我必须做出一些更改,我认为维护同一功能的 2 个副本是不可持续的。
from x import x
if x.__version__.split('.')[0] == '7':
@x.resultcallback()
def process_pipeline(func, **kwargs):
with x.get_stream as fin:
func(fin)
elif x.__version__.split('.')[0] == '8':
@x.result_callback()
def process_pipeline(func, **kwargs):
with x.get_stream as fin: …Run Code Online (Sandbox Code Playgroud) 代码工作正常.我刚才有一个效率问题.在这段代码中,我使用" try... except"来传递会导致程序崩溃的错误.该错误是由IP地址无法访问引起的.正如我之前所说,代码完成了它的工作.我想知道这是否是最快的方式来查看IP是否可以访问并将其传递出去.如果找不到IP,它会停止30到45秒.堆积了几次这可能相当费时.
import win32net
def GetUsers( IP ):
try:
Users = win32net.NetGroupGetUsers(IP,'none',0),
except:
print IP + ': Was not found!'
else:
print IP + ': ' + Users
return
F = open("C:\Users\*User*\Desktop\IP_List.txt")
for CurrentIP in F.readlines():
GetUsers(CurrentIP.strip()),
F.close()
print 'DONE!'
Run Code Online (Sandbox Code Playgroud) 我必须处理大量的尝试/除外.我对正确的做法表示怀疑.
选项1:
inst = Some(param1, param2)
try:
is_valid = retry_func(partial(inst.some_other), max_retry=1)
except RetryException, e:
SendMail.is_valid_problem(e)
if is_valid:
print "continue to write your code"
...
*** more code with try/except ***
...
Run Code Online (Sandbox Code Playgroud)
选项2:
inst = Some(param1, param2)
try:
is_valid = retry_func(partial(inst.some_other), max_retry=1)
if is_valid:
print "continue to write your code"
...
*** more code with try/except ***
...
except RetryException, e:
SendMail.is_valid_problem(e)
Run Code Online (Sandbox Code Playgroud)
在选项1中,即使引发了异常,也会测试"is_valid",我不需要它.
在选项2中,我认为是正确的,但代码看起来像一个"回调地狱".
我应该选择什么选项或哪个选项是正确的?
我想计算部分语音标签.到目前为止,我有一个存储在字典中的词性标记(用于德语),其中POS标记所在的键,以及出现次数的值.
当我统计时,我想将'NN'和'NE'概括为一个变量'nouns_in_text',因为它们都是名词.我成功地完成了这个.当我有一个输入文本,其中我有'NN'和'NE',在这种情况下我的代码正在工作,我得到正确的结果,意味着'NN'和'NE'的总和.
但问题是,当我有一个输入文本,例如只有'NN'而没有'NE'时,我得到一个KeyError.
我需要代码来查看输入文本中是否存在"NN"或"NE".如果有'NN'和'NE',那么总结它们.如果只有'NN',那么只返回'NN'的出现次数,如果只有'NE'则返回相同的值.如果既没有'NN'也没有'NE'返回0或"无".
我想要一个代码,它可以在以下描述的场景中适用于所有三个,而不会出现错误.
# First Scenario: NN and NE are in the Input-Text
myInput = {'NN': 3, 'NE': 1, 'ART': 1, 'KON': 1}
# Second Scenario: Only NN is in the Input-Text
#myInput = {'NN': 3, 'ART': 1, 'KON': 1}
# Third Scenario: Neither NN nor NE are in the Input-Text
#myInput = {'ART': 1, 'KON': 1}
def check_pos_tag(document):
return document['NN'] + document['NE']
nouns_in_text = check_pos_tag(myInput)
print(nouns_in_text)
# Output = If NN and NE are in the input …Run Code Online (Sandbox Code Playgroud) python ×10
try-except ×10
api ×1
count ×1
decorator ×1
dictionary ×1
if-statement ×1
ip ×1
performance ×1
python-3.x ×1
recursion ×1
user-input ×1